image.png
    image.png
    (1)把类定义在另一个类的内部,该类就被称为内部类。
    举例:把类B定义在类A中,类B就被称为内部类。
    (2)内部类的访问规则
    A:可以直接访问外部类的成员,包括私有
    B:外部类要想访问内部类成员,必须创建对象
    (3)内部类的分类
    A:成员内部类

    B:局部内部类
    C:匿名内部类
    (4)成员内部类访问规则
    成员内部类不是静态的:
    外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
    成员内部类是静态的:

    外部类名.内部类名 对象名 = new 外部类名.内部类名();
    (5)局部内部类
    A:局部内部类访问局部变量必须加final修饰。
    B:为什么呢?
    因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
    所以,堆内存还是用该变量,而改变量已经没有了。
    为了让该值还存在,就加final修饰。
    通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。
    (6)匿名内部类(掌握)
    A:是局部内部类的简化形式
    B:前提
    存在一个类或者接口
    C:格式:
    new 类名或者接口名() {
    重写方法;
    }
    D:本质:
    其实是继承该类或者实现接口的子类匿名对象