(34)内部类
内部类[不常用]
一、
定义:将一个类定义在另一个类的里面,对里面的那个类就称为内部类(内置类、嵌套类)
二、内部类的访问规则(互访方式)
①内部类可以直接访问外部类中的成员,包括私有
之所以可以直接访问外部类的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this
②外部类要访问内部类,必须建立内部类对象
对这个访问规则简单解释:
若孙悟空就在牛魔王的肚子里,孙悟空要访问心脏,则可直接去,直接访问(内部类直接访问外部成员)
若牛魔王要访问孙悟空的心脏,要先建立孙悟空对象,再得到孙悟空的心脏。(外部类访问内部类)
三、举个栗子:
public class Outer {
int x=3;
class Inner{
int x=4;
void function() {
int x=6;
System.out.println("inner:"+x);//6
System.out.println("inner:"+this.x);//4
System.out.println("inner:"+Outer.this.x);//3
}
}
public void method() {
Inner in=new Inner();
in.function();
}
}
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 间接访问内部类成员
*/
Outer ot=new Outer();
ot.method();
/*
* 直接访问内部类成员
*/
Outer.Inner in=new Outer().new Inner();
}
四、访问方式
①当内部类定义在外部类的成员位置上时,而且非私有,可以在外部其他类中,可以直接建立内部类对象。
格式:外部类.内部类 变量名=new外部类名().内部类名()
Outer.Inner in=new Outer().new Inner();
②当内部类在成员位置上,就可以被成员修饰符所修饰
比如,private:将内部类在外部类中进行封装。
Static:内部类就具备static的特性
当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。
在外部其他类中创建
五、什么时候用内部类
当描述事物时,事物的内部还有事物,该事物用内部类描述。
因为内部事务在使用外部事物的内容