黑马程序员技术交流社区

标题: 为什么外部类能访问内部类的private成员? [打印本页]

作者: xiangzi2008006    时间: 2013-8-23 13:03
标题: 为什么外部类能访问内部类的private成员?
本帖最后由 xiangzi2008006 于 2013-8-23 20:55 编辑

在外部类中创建内部类,然后通过获取内部类实例能够直接访问内部类的private成员,这是为什么? private的定义到底是如何?

作者: xuluheng718    时间: 2013-8-23 13:39
首先这是JAVA的语法规则,至于为什么,我没有深度研究过,但是按照我们的思维逻辑既然是内部类,那么就说明这个内部类应该是外部类的成员中的一个,内部类的成员变量或成员方法,外部类就应该知道。这就好比如我有一个箱子,箱子里面装了什么东西,我是否应该知道呢?
作者: 黑马-文鸿利    时间: 2013-8-23 15:18
你既然是用private修饰符,就是希望声明的成员变量不被外部的类访问,而实现封装,那就要写相应的get和set方法来实现对成员变量的修改和访问!不然的话,你用public修饰,就应该不会报错了,如果还报错,就加上static关键字!应该就ok了!
作者: 梦航    时间: 2013-8-23 16:27
当然可以。private修饰符是这样规定的:
如果一个类里的成员被private修饰,那就表明这个成员只能在该类内部被访问。
内部类分为两种,一种是非静态内部类,另一种是静态内部类。
1、因为静态成员不能直接访问非静态成员的规则,所以对于非静态内部类,外部类的静态成员不能直接访问,而是正如你说的,通过创建内部类的实例来访问内部类属性
2、对于静态内部类,被static修饰的内部类是外部类类相关的,外部类的静态成员可以使用静态内部类成员,但是——外部类依然不能直接访问静态内部类的成员,此时可以通过使用内部类的类名作为调用者来访问静态内部类成员

时刻记住一点:静态成员不能直接访问非静态成员
作者: DxxD    时间: 2015-3-11 15:26
我觉没有说到点子上,内部类(非静态)可以直接访问外部类成员(非静态),是因为内部有持有外部类。this这个引用




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