如题,为什么静态内部类的实例方法不能访问外部类的实例属性?不是很能理解。
1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
简单地说,就是这个类被编译(?)的时候,static变量会被初始化有且只有一次。但非静态的变量是对象被创建的时候(即new的时候)才存在的,所以static在第一次初始化的时候,这些非静态变量根本不存在,所以也就引用不了了。
因为静态内部类是外部类的类相关的,而不是外部类的对象相关的。也就是说,静态内部类对象不是寄生在外部类的实例中,而是寄生在外部类的类本身中。
当静态内部类对象存在时,并不存在一个被它寄生的外部类对象,静态内部类对象支持有外部类的类引用,没有持有外部类对象的引用。
如果允许静态内部类的实例方法访问外部类的实例成员,但找不到被寄生的外部类对象,这将引起错误。