概念:在一个类内部定义的类 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.优缺点: 优点:减少代码量 缺点:可读性差,可维护性差