特点:
1、编译后生成独立的字节码文件
2、内部类可以访问外部类的私有成员
3、为外部类提供必要的内部功能组件
一、成员内部类
依赖于外部类
与成员变量等平级
调用方法:
1、创建外部类对象(假设是outer)
2、创建内部类对象(假设是inner)
则
Outer outer = new Outer();
Inner inner = outer.new Inner();
简化版:
Inner inner = new Outer(). new Inner();
注意:当成员内部类与外部类有重名属性时,优先访问成员内部类的属性
成员内部类中不能定义静态成员
要想调用外部类属性,则要写Outer. this. 属性
二、内部静态类
由static修饰,本身与外部类平级,不依赖于外部类。因此要调用外部类的属性,要先实例化(创建对象)
static只能修饰内部类,不能修饰外部类
步骤:
1、创建外部类对象
2、对象. 属性();
调用方法:
假设Outer,Inner
Outer.Inner inner = new Outer. Inner();
Outer.Inner表示Inner在Outer内部
三、局部内部类
写在方法里的类
即:(结构)
类
方法
类
方法(四层套娃)
局部内部类和局部变量都不能用访问修饰符修饰,且局部内部类中不能有静态成员
调用方法:
想要调用,就要在原来的类中实例化局部内部类,接着直接调用外部类即可
想要调用第一层方法中的变量,必须由final修饰(因为局部变量不被final修饰方法使用后就会消失,不能调用)
四、匿名内部类
类似局部内部类,只不过没有类名
实际上是将类的定义与实例化的过程结合起来的省略写法,但只能有一个该类的对象
继承父类或接口
即:
接口名 对象名 = new 接口名(){
继承来的方法
};
对象.方法();