静态内部类的简单使用

586 阅读2分钟

总结

1.外部类调用内部类的属性和方法
  (1)外部类内部调用内部类中的属性和方法
     a. 非静态属性和非静态方法: 内部类实例.属性(方法)
     b. 静态属性和静态方法: 内部类.属性(方法)
  (2)外部类外部调用内部类中的属性和方法
    a. 非静态属性和非静态方法: 外部类实例.内部类.属性(方法)
    b. 静态属性和静态方法: 外部类.内部类.属性(方法)
2.内部类调用外部类中的属性和方法
  a. 非静态属性和非静态方法:可以通过创建外部类实例的方法来调用
外部类实例.属性(方法)
  b. 内部类可以直接调用外部类中的静态属性和静态方法

示例

public class Test {
    // 静态内部类
    public static void main(String[] args) {
        // 1.创建内部类实例 不在外部类中 需要用 外部类.内部类
        ExternalClass.StaticInnerClass staticInnerClass = new ExternalClass.StaticInnerClass();
        // 外部类内部调用内部类中的属性和方法
        // Non-static field 'id' cannot be referenced from a static context
        // System.out.println(StaticInnerClass.id);
        // Non-static method 'show()' cannot be referenced from a static context
        // StaticInnerClass.show();
        // 非静态属性和非静态方法 外部类实例.内部类.属性(方法)
        System.out.println(staticInnerClass.number);
        // 'id' has private access in 'ExternalClass.StaticInnerClass'
        // System.out.println(staticInnerClass.id);
        staticInnerClass.show();
        // 'name' has private access in 'ExternalClass.StaticInnerClass'
        // System.out.println(ExternalClass.StaticInnerClass.name);
        // 静态属性和静态方法 外部类.内部类.属性(方法)
        System.out.println(ExternalClass.StaticInnerClass.address);
        ExternalClass.StaticInnerClass.display();
    }
}
public class ExternalClass {
    private String var;
    private static String staticVar;
    public void method(){

    }
    public static void staticMethod(){

    }
    // 2.创建内部类实例 在外部类中
    StaticInnerClass staticInnerClass = new StaticInnerClass();
    // 外部类内部调用内部类中的属性和方法
    public void test(){
        // Non-static field 'id' cannot be referenced from a static context
        // System.out.println(StaticInnerClass.id);
        // Non-static method 'show()' cannot be referenced from a static context
        // StaticInnerClass.show();
        // 非静态属性和非静态方法 内部类实例.属性(方法)
        System.out.println(staticInnerClass.id);
        staticInnerClass.show();
        // 静态属性和静态方法 内部类.属性(方法)
        System.out.println(StaticInnerClass.name);
        StaticInnerClass.display();
    }
    public static class StaticInnerClass{
        private int id;
        int number;
        private static String name;
        static String address;
        // 内部类内部调用外部类中的属性和方法
        public void show(){
            // 非静态属性和非静态方法
            // Non-static field 'var' cannot be referenced from a static context
            // System.out.println(var);
            // Non-static method 'method()' cannot be referenced from a static context
            // method();
            // 可以通过创建外部类实例的方法来调用 外部类实例.属性(方法)
            ExternalClass externalClass = new ExternalClass();
            System.out.println(externalClass.var);
            externalClass.method();
            // 内部类可以直接调用外部类中的静态属性和静态方法
            System.out.println(staticVar);
            staticMethod();
        }
        public static void display(){

        }
    }
}