java面向对象中内部类详解
一、分类:局部内部类、匿名内部类、成员内部类、静态内部类
二、局部内部类
-
局部内部类(有类名)定义在外部类的局部位置,通常在方法
-
作用域 : 仅仅在定义它的方法或代码块中
-
不能添加访问修饰符,但是可以使用 final 修饰
-
可以直接访问外部类的所有成员、方法,包含私有的
-
如果外部类和局部内部类的成员、方法重名时,默认遵循就近原则
-
如果外部类和局部内部类的成员、方法重名时,想访问外部类的成员、方法,使用 外部类名.this.成员)去访问
-
外部类访问局部内部类的成员、方法 ,可以先创建内部类对象,再访问(注意:必须在作用域中)
-
外部其他类—不能访问----局部内部类(因为局部内部类地位是一个局部变量)。
三、匿名内部类
-
匿名内部类(通过new 类或者接口)是定义在外部类的局部位置,通常在方法
-
作用域 : 仅仅在定义它的方法或代码块中
-
不能添加访问修饰符
-
可以直接访问外部类的所有成员、方法,包含私有的
-
如果外部类和局部内部类的成员、方法重名时,默认遵循就近原则
-
如果外部类和局部内部类的成员、方法重名时,想访问外部类的成员、方法,(使用外部类名.this.成员)去访问
-
外部类在方法中,可以创建 Inner02 对象,然后直接调用成员、方法即可(对象实例.内部类成员 对象实例.内部类方法)
-
外部其他类—不能访问----匿名内部类(因为局部内部类地位是一个局部变量)
除了第三点,其他几点与局部内部类类似。
四、成员内部类
成员内部类是定义在外部类的成员变量的位置上,并且没有static修饰
- 可以直接访问外部类的所有成员,包含私有的
- 可以添加任意访问修饰符(public,protected,默认,private),因为它的地位就是一个成员
- 作用域:与外部类的其他成员一样为整个类体
- 成员内部类 --访问—>外部类成员、方法; 访问方式:直接访问
- 外部类 --访问—>成员内部类成员、方法; 访问方式:创建对象,再访问 (成员内部类名 xx = new 成员内部类名)
- 外部其他类–访问—>成员内部类;访问方式:创建对象,再访问(外部类名.成员内部类名 xx = 外部类名.new 成员内部类名)
- 如果外部类与成员内部类成员重名时,内部访问的话,默认遵守就近原则;如果想访问外部类的成员时,则可以使用(外部类名.this.成员)去访问
五、静态内部类
静态内部类是定义在外部类的成员位置,并且有static修饰
- 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员
- 可以添加任意访问修饰符(public,protected,默认,private)因为它的地位就是一个成员
- 作用域:同其他的成员一样,都是整个类
- 静态内部类–访问---->外部类(比如:静态属性);访问方式:直接访问所有静态成员
- 外部类–访问---->静态内部类;访问方式:创建对象,再访问
- 外部其他类—访问—>静态内部类
- 如果外部类与静态内部类的成员重名时,静态内部类访问的时,默认就近原则; 如果想访问外部类的成员,则可以使用(外部类名.成员)去访问。