黑马程序员技术交流社区

标题: 关于内部类的一些细节问题 [打印本页]

作者: 越雪    时间: 2017-4-12 22:42
标题: 关于内部类的一些细节问题
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
       
        注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。


这是在毕老师的笔记中找到,不是很理解?   求解释一下?

静态的内部类相当于外部类的静态方法吗?只能访问外部类的静态成员??  为什么说他相当于外部类?
内部类如果有静态成员的,,为啥类也必须是静态的???




作者: zeng1002    时间: 2017-4-13 00:15
你可以把内部类当成外部类的成员,那么静态内部类是不是相当于外部类的静态成员?静态成员是不依赖对象而存在的,可以直接类名调用,类加载的时候就已经加载好了。但他又不是一个静态成员,而是一个类,他已经独立于外部类了,所以他已经不依赖他的外部类了,相当于外部类。至于第二点,因为成员内部类中是不能定义静态成员的,成员内部类你可以看成是外部类的成员变量,所以定义了静态成员就只能是静态内部类。

作者: 越雪    时间: 2017-4-13 00:18
zeng1002 发表于 2017-4-13 00:15
你可以把内部类当成外部类的成员,那么静态内部类是不是相当于外部类的静态成员?静态成员是不依赖对象而存 ...

第一点解释我看懂了,第二点的解释不怎么懂

作者: 越雪    时间: 2017-4-13 00:20
成员内部类为啥不能定义静态变量,定义了,类也必须是静态的呢???

作者: zeng1002    时间: 2017-4-13 12:49
越雪 发表于 2017-4-13 00:20
成员内部类为啥不能定义静态变量,定义了,类也必须是静态的呢???

因为成员内部类你可以看成是外部类的非静态成员,外部类加载的时候它已经被加载到方法区的非静态区了,但它毕竟是一个类,里面还可以定义成员和方法,而静态属性和方法都是加载到静态区的,所以这个类在定义成员和方法的时候定义静态的,编译器会认为你在非静态区加载静态属性和方法,这是不允许的

作者: 94651417    时间: 2017-4-13 13:06
受教了,都比我厉害





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2