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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵玮 黑马帝   /  2012-1-4 10:56  /  2196 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵玮 于 2012-1-4 14:04 编辑

定义了一个内部类MyValue, 成员变量关键字设为private, 为什么在这个内部类外还能通过赋值语句对它修改?不是说private定义的变量只能在定义它的类内使用吗?

public class OperatorsAndExpressions {
void equalsMethod2() {
  String s1=new String("hello");
  String s2=new String("hello");
  System.out.println(s1==s2);
  System.out.println(s1.equals(s2));
  
  class MyValue {
   private int i;
  }
  MyValue v1=new MyValue();
  MyValue v2=new MyValue();
  v1.i=v2.i=2003;
  System.out.println(v1.equals(v2));
}

public static void main(String args[]) {
  OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
  OperAndExp.equalsMethod2();
}
}

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 罗利民 于 2012-1-4 13:12 编辑

内部类可以访问外部类的任何成员,包括private成员。
外部类访问内部类的成员需要创建内部类的对象,之后可以访问内部类的任何成员,包括private成员,需要注意的是成员内部类不可以有静态成员。


变量i在类MyValue里,而MyValue又在OperatorsAndExpressions 里,也就是说,MyValue是i的爸爸,而OperatorsAndExpressions是i 的爷爷,所以,我们可以说,i 即属于MyValue内部又属于OperatorsAndExpressions内部的成员,

根据sun的文档 private   modifier—the   field   is   accessible   only   within   its   own   class

我们可以认为,在OperatorsAndExpressions 里也可以通过内部类实例访问到i 成员变量

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
因为你定义的private是类内部属性啊
当你要在外部修改肯定不行,而你在类内部定义一个修改该private的函数
权限为public时,在外部调用这个函数时,相当于函数修改这个private
而这个函数和private在同一个类中,private关键字对于他无效
也就是说private也包括这个函数在内,共同私有的,
private:同类中可以访问(当然包括在该类中创建自己的对象来访问)。

评分

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

查看全部评分

回复 使用道具 举报
      可以这样理解:class MyValue {}是 OperatorsAndExpressions {}类的内部类,也就是OperatorsAndExpressions {}类的成员了。那class MyValue {}类中的private i;成员也还是 OperatorsAndExpressions {}类的成员了。这样的话在 OperatorsAndExpressions {}类中访问它的成员private i;就说的过去了吧!只是在 OperatorsAndExpressions {}类访问private i;的话的先创class MyValue {}类对象 必竟还是class MyValue {}类最清楚自己内部的成员。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马