文章目录

  • 1、定义
  • 2、规则


1、定义

在方法或某个作用域内的内部类,称为局部内部类。匿名内部类就是一种局部内部类。

实现方式

public class OutterType {   
    public void function() {
        /** 局部内部类Inner*/
        class Inner {
            public void print() {
                System.out.println("局部内部类...");
            }
        }
    }
}

注意:

  • 内部类不能被public、private、static修饰
  • 在外部类中不能创建内部类的实例
  • 创建内部类的实例只能在包含他的方法中
  • 内部类访问包含他的方法中的变量必须有final修饰
  • 外部类不能访问局部内部类,只能在方法体中访问局部内部类,且访问必须在内部类定义之后

2、规则

  • 规则一:局部内部类类似方法的局部变量,所以在类外或者类的其他方法中不能访问这个内部类,但这并不代表局部内部类的实例和定义了它的方法中的局部变量具有相同的生命周期
  • 规则二:只能在方法内部,类(局部内部类)定义之后使用,不存在外部可见性问题,因此没有访问修饰符
  • 规则三:不能在局部内部类中使用可变的局部变量
  • 规则四:可以访问外围类的成员变量。如果是static方法,则只能访问static修饰的成员变量
  • 规则五:可以使用final 或 abstract修饰

3.案例代码

public class JubuInnerClass {

    // 1.外部类的属性
    private String field01 = "外部类的私有属性field01";
    public String field02 = "外部类的共有属性field02";

    // 2.外部类的构造器
    public JubuInnerClass() {
    }

    public JubuInnerClass(String field01, String field02) {
        this.field01 = field01;
        this.field02 = field02;
    }

    // 3.外部类的方法
    public void method01(){
        System.out.println("== 外部类的共有方法 : method01 ");
    }
    private void method02(){
        System.out.println("== 外部类的私有方法 : method02 ");
    }

    // * 包含内部类的方法
    public void method03(){

        System.out.println("== 外部类的方法03 begin : 此方法包含一个局部内部类 == ");
        System.out.println();

        // 下面开始编写 局部内部类的代码
        class innerClass{
            // 1.局部内部类 的 属性
            private String field01_inner = "局部内部类的私有属性";
            public String field02_inner = "局部内部类的共有属性";
            private String field02 = "局部内部类的和外部类重名的属性";

            // 2.局部内部类的 构造器
            public innerClass() {
            }
            public innerClass(String field01_inner, String field02_inner, String field02) {
                this.field01_inner = field01_inner;
                this.field02_inner = field02_inner;
                this.field02 = field02;
            }

            //3.局部内部类的方法
            public void method01_inner(){
                System.out.println("--> 这是局部内部类的方法 method01_inner : begin <--");

                System.out.println("直接访问外部类的私有成员 field01 : "+field01);

                System.out.println("直接访问外部类的方法method01()、method02 :");
                method01();
                method02();

                System.out.println("--> 这是局部内部类的方法 method01_inner : end <--");
            }

            public void method02_inner(){
                System.out.println("--> 这是局部内部类的方法 method02_inner 演示内部类如何访问同名的外部类的属性field02  begin <--");
                System.out.println("外部类的属性 field02 : "+JubuInnerClass.this.field02);
                System.out.println("--> 这是局部内部类的方法 method02_inner 演示内部类如何访问同名的外部类的属性field02  end <--");
            }
        } // innerClass end

        // 外部类访问内部类 : 创建内部类的对象,通过对象进行访问
        innerClass innerClass = new innerClass();
        innerClass.method01_inner();
        System.out.println();
        innerClass.method02_inner();

        System.out.println();
        System.out.println("== 外部类的方法03 end : 此方法包含一个局部内部类 == ");

    }
}

java 局部块 java局部方法_局部内部类