问答详情
源自:7-7 Java 中的静态内部类

为什么静态内部类的实例方法也不能访问外部类的实例属性?

如题,为什么静态内部类的实例方法不能访问外部类的实例属性?不是很能理解。

提问者:释迷 2016-06-24 16:25

个回答

  • Life_Unexpected
    2016-06-24 16:39:58
    已采纳

    1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

    2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();


  • Carol_Li
    2016-09-05 15:46:05

    简单地说,就是这个类被编译(?)的时候,static变量会被初始化有且只有一次。但非静态的变量是对象被创建的时候(即new的时候)才存在的,所以static在第一次初始化的时候,这些非静态变量根本不存在,所以也就引用不了了。

  • 风云7857
    2016-06-24 17:18:05

    因为静态内部类是外部类的类相关的,而不是外部类的对象相关的。也就是说,静态内部类对象不是寄生在外部类的实例中,而是寄生在外部类的类本身中。

    当静态内部类对象存在时,并不存在一个被它寄生的外部类对象,静态内部类对象支持有外部类的类引用,没有持有外部类对象的引用。

    如果允许静态内部类的实例方法访问外部类的实例成员,但找不到被寄生的外部类对象,这将引起错误。