概念:在一个类内部定义的类
1.内部类会生成独立的.class文件。文件名Outer$Inner.class
2.内部类可以访问外部类的私有属性,从而不破坏外部类的封装性
成员内部类(类比成员变量)
1.定义位置:类以内,方法以外
2.如何创建对象
Outer o = new Outer(); //创建外部类对象
Outer.Inner inner = o.new Inner(); //创建成员内部类对象
3.注意:
a. 访问外部类的属性:外部类类名.this.外部类属性名
例:Outer.this.a;
b. 成员内部类中不能定义静态成员 (属性和方法)
静态内部类(类比静态变量)
1.定义位置:类以内,方法以外。被static
修饰
2.如何创建对象:
Outer.Inner inner = new Outer.Inner(); //创建静态内部类对象
3.注意:
a.静态内部类中不能访问外部类的非静态属性
局部内部类(类比局部变量)
1.定义位置:方法内部
2.如何创建对象:
只能在它所在的方法内部创建
class Outer{
public void m1() {
class Inner02{
//局部内部类
}
Inner02 inner = new Inner02(); //只能在m1方法内部创建局部内部类对象
}
}
3.注意:
局部内部类访问它所在方法中的局部变量,那么这个变量必须被final修饰
在JDK 8.0开始,这个局部变量默认被final修饰
匿名内部类
1.特殊的局部内部类,局部内部类具有的特点 匿名内部类都有
2.必须实现一个接口或者继承一个类
接口名/父类名 引用名 = new 接口名/父类名(){
//匿名内部类的内容
} //定义了一个匿名内部类 并且创建匿名内部类的对象
3.注意:
匿名内部类只能创建一个对象
4.优缺点:
优点:减少代码量
缺点:可读性差,可维护性差