内部类
类的五大成员
属性,方法,构造器,内部类,代码块
定义在外部类的局部位置上,比如方法体内,代码块内
局部内部类
局部内部类
是定义在外部类的局部位置,可以在方法中和代码块中,局部内部类有类名- 可以直接访问外部类的所有成员
- 不能添加访问修饰符,局部内部类的地位就相当于局部变量但是可以用
final
修饰,如果加上final
,就不可以被继承 - 作用域:仅在定义它的代码块或方法中。
- 在外部类的其他方法中可以直接
new
这个内部类 - 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
匿名内部类 重点!!!
匿名内部类
是定义在外部类的局部位置,可以在方法中和代码块中,该类“表面”上没有名字,并且是一个对象- 基本语法:
new 类或接口(参数列表){类体};
成员内部类
-
成员内部类
是定义在外部类的成员位置,并且没有static 修饰。 -
可以直接访问外部类的所有成员,包含私有的
-
可以添加任意访问修饰符,因为它的地位就是一个成员
-
作用域和外部类中其他成员一样
-
外部类访问成员内部类:创建内部类对象再访问
-
外部其他类访问成员内部类两种方式:
public class Outer { private int n = 10; public void m(){ System.out.println("外部类的m方法===="); } public class Inner{} // 访问方式2 public Inner create(){return new Inner();} } // 访问方式1:先创建一个外部类的实例对象,始终把内部类看成外部类的一个成员, 外部对象.成员 Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); // 或者 Outer.Inner inner = new Outer().new Inner(); // 访问方式2:在外部类中写一个方法用于返回一个内部类对象
-
如果内部类的成员想访问外部类的成员:
外部类名.this.成员名
静态内部类
静态内部类
是定义在外部类的成员位置,并且有static 修饰。- 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员
- 可以添加任意访问修饰符,因为它的地位就是一个成员
- 作用域和外部类中其他成员一样
- 外部其他类访问成员内部类两种方式:
public class Outer {
private int n = 10;
public void m(){
System.out.println("外部类的m方法====");
}
public static class Inner{}
// 访问方式2
public Inner create(){return new Inner();}
}
// 访问方式1:因为是静态的,所以可以直接通过类名. 访问(前提是满足访问权限)
Outer.Inner inner = new Outer.Inner();
// 访问方式2:在外部类中写一个方法用于返回一个静态内部类对象
别忘记了静态成员的访问权限规则。