内部类的定义:
一个类的内部又嵌套了另一个类结构。被嵌套的类就叫内部类,嵌套其他类的类称为外部类(outer class),内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。
class Outer { //外部类
private int n1 = 100;//属性
public Outer(int n1) {//构造器
this.n1 = n1;
}
public void say(){
//方法
}
{
//代码块
}
class Inner{
//内部类
}
}
class Other {
//外部其他类
}
类的五大成员:成员、方法、构造器、代码块、内部类
内部类的分类:
- 定义在外部类的局部位置上分为 局部内部类和匿名内部类
- 定义在外部类的成员位置上分为 成员内部类和静态内部类
局部内部类:
public class LocalInnerClass {//外部其他类
//7.外部其他类不能访问局部内部类(因为局部内部类的地位就是一个局部变量)
public static void main(String[] args) {
Outer02 outer02 = new Outer02();
outer02.m1();
}
}
class Outer02 {
private int n1 = 10;
private int n2 = 800;
private void m2() {
System.out.println("m2()被调用...");
}
public void m1(){
//1.定义在外部类的局部位置上,比如方法中,并且有类名
//3.不能添加访问修饰符,但可以用final修饰
//4.作用域:仅仅再定义它的方法或代码块中
final class Inner02 {//局部内部类(本质还是一个类)
private int n2 = 4657;
public void f1(){
//2.可以直接访问外部类的所有成员,包含私有的
//5.内部类访问外部类成员的方式 ==> 直接访问
System.out.println("n1=" + n1);
m2();
//8.如果外部类和局部内部类的成员重名时,默认遵守就近原则
// 如果要访问外部类的成员,则可以使用 外部类名.this.成员名 去访问
// 解读:Outer02.this 本质就是外部类的对象,即哪个对象调用m1,Outer02.this就是哪个对象
System.out.println("就近原则的n2=" + n2);
System.out.println("访问外部类的n2=" + Outer02.this.n2);
}
}
//6.外部类在内部类的作用域内,可以创建内部类对象,然后就可以调用内部类的成员
Inner02 inner02 = new Inner02();
inner02.f1();
}
}