1.基本介绍
一个类的内部有完整的嵌套了另一个类。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。 是我们类的五大成员(属性、方法、代码块、构造器、内部类),内部类的最大特点就是可以直接访问私有属性,并且可以体现类与类的包含关系。
2.内部类的分类
- 定义在外部类局部位置上(方法、代码块):
a) 局部内部类(有类名)
b) 匿名内部类(没有类名,重点)- 定义在外部类的成员位置上:
a) 成员内部类(没有static修饰)
b) 静态内部类(使用static修饰)
3.局部内部类的使用
public class Outer01 { // 外部类
private int n1 = 100;
private void m2() {
System.out.println("Outer01 m2()");
}
public void m1() {
//1.局部内部类通常是定义在外部类的局部位置,通常在方法中
//3.不能添加访问修饰符,但是可以使用final修饰
//4.作用域: 仅仅在定义它的方法或代码块中
final class Inner01 { // 局部内部类
private int n1 = 800;
//2.可以直接访问外部类的成员,包含私有
public void f1() {
//5.局部类可以直接访问外部类的成员,比如: 下面的n1, m2()
//7.如果外部类和内部类的成员重名时,默认遵循就近原则,如果想使用外部类的成员,使用(外部类名.this.成员)去访问
// Outer01.this 本质就是外部类对象,即那个对象调用了m1,Outer01.this就是那个对象
System.out.println("n1=" + n1 + " 外部类n1=" + Outer01.this.n1);
m2();
}
}
//6.外部类在方法中, 可以创建Outer01对象, 然后调用方法即可
Inner01 inner01 = new Inner01();
inner01.f1();
}
}
4.局部匿名类的使用