A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 xiangzi2008006 于 2013-8-23 20:55 编辑

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

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

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

时刻记住一点:静态成员不能直接访问非静态成员

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2 赞一个!

查看全部评分

回复 使用道具 举报
我觉没有说到点子上,内部类(非静态)可以直接访问外部类成员(非静态),是因为内部有持有外部类。this这个引用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马