内部类的访问规则
1. 内部类可以直接访问外部类的成员,包括私有。
之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this
2.外部类要访问内部类,必须建立内部类对象。
访问格式:
1.当内部类定义在外部类的成员位置上并且非私有时,可以在外部其他类中,直接建立内部类的对象。
格式:
外部类名.内部类名 变量名=外部类对象.内部类对象;
如:Outer.Inner in=new Outer().new Inner();
2.当内部类在成员位置上,就可以被成员修饰符所修饰。
比如private:将内部类在外部类中进行封装。
static:内部类就具备了static的特性。
当内部类被static修饰后,只能访问外部类的静态成员,出现了访问局限。
在外部其他类中,如何直接访问static内部类的静态成员呢?
Outer.Inner.function();(Inner 是静态的,可以直接通过外部类名Outer来访问;function也是静态的,可以直接通过其所在类的类名Inner访问。)
注意:如果在内部类中定义了静态成员,则该内部类必须也是静态的。
当外部类中的静态方法中需要访问内部类时,内部类必须也是static的。
总的来说就是那个比较常见的提示:“不能在静态上下文中引用非静态变量”。
3.因为内部类可以定义在外部类中任意的位置。
当内部类被定义在局部时(比如,在方法中):
1.不可以被成员修饰符修饰。
2.可以直接访问外部类中的成员,因为还持有外部类的引用。
但不可以访问它所在的局部区域中的变量,除非该变量被final修饰。
什么时候需要使用内部类?
当描述事物时,事物的内部还有事物,在内部的事物就用内部类来描述,因为内部事物需要使用外部事物的内容。