深入理解Java中为什么内部类可以访问外部类的成员

如题所述


内部类不能是静态内部类!

  非静态的内部类在编译后会有外部类对象的引用,所以构造这种内部类必须先构造外部对象,再用外部对象构造内部对象。

    @Test
    public void testNested() {
        Clazz obj = new Clazz();
        Nested nested = obj.new Nested();
        nested.print();
    }
    
    class Clazz {
        Integer id;
        
        class Nested {
            String name;
            public void print() {
                System.out.println(id);
            }
        }
    }

注意nested对象的this$1成员变量,类型是外部类,对象id和obj的id是相同的(id=49)。

温馨提示:答案为网友推荐,仅供参考
相似回答