定义格式:

    修饰符 class 外部类名称{
    修饰符 返回值类型 外部类方法名称(参数列表){
    class 局部内部类名称{
    //……
    }
    }
    }
    创建:
    image.png
    调用:
    image.png
    小结类的权限修饰符:
    public > protected > (default) > pprivate
    定义一个类的时候,权限修饰符的规则:
    1.外部类:public / (default)
    2.成员内部类:public / protected / (default)/ private
    3.局部内部类:什么都不写

    局部内部类:如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】
    备注:从Java 8+开始,只要局部变量事实不变,那么final关键字可以省略
    原因new出来的对象在堆内存当中
    2.局部变量是跟着方法走的,在栈内存当中
    3.方法运行结束之后,立刻出栈,局部变量就会立刻消失
    4.但是new出来的对象会在堆当中持续存在,直到垃圾回收消失

    语法
    定义在方法的里面 - 局部

    1. package Test14_Demo.Demo08;/*
    2. @create 2020--12--02--15:12
    3. */
    4. public class NestedClass {
    5. //定义成员变量
    6. private String name = "AAA";
    7. //外部类的方法
    8. public void outerMethod() {
    9. //定义一个局部内部类
    10. class InnerClass {
    11. //声明一个局部内部类的方法
    12. public void innerMethod() {
    13. System.out.println("局部内部类中的方法被调用了");
    14. System.out.println("外部类中的成员变量name的值为:"+ name);
    15. }
    16. }
    17. //定义好局部内部类之后可以使用类 - 必须使用
    18. InnerClass inner = new InnerClass();
    19. inner.innerMethod();
    20. }
    21. //生成get/set
    22. public String getName() {
    23. return name;
    24. }
    25. public void setName(String name) {
    26. this.name = name;
    27. }
    28. }

    局部内部类的访问格式:
    1.创建外部类
    2.通过外部类的对象调用方法来操作局部内部类

    1. package Test14_Demo.Demo08;/*
    2. @create 2020--12--02--15:09
    3. */
    4. public class NestedClassDemo {
    5. public static void main(String[] args) {
    6. //创建外部类的对象
    7. NestedClass nc = new NestedClass();
    8. //通过外部类的对象调用方法来操作局部内部类
    9. nc.outerMethod();
    10. }
    11. }