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

来源:7-7 Java 中的静态内部类

释迷

2016-06-24 16:25

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

写回答 关注

3回答

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

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

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

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


    释迷

    非常感谢!

    2016-06-25 12:25:22

    共 1 条回复 >

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

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

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

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

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

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


Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530560 学习 · 6091 问题

查看课程

相似问题