黑马程序员技术交流社区
标题:
private问题
[打印本页]
作者:
赵玮
时间:
2012-1-4 10:56
标题:
private问题
本帖最后由 赵玮 于 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();
}
}
作者:
罗利民
时间:
2012-1-4 11:48
本帖最后由 罗利民 于 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 成员变量
作者:
詹英鹏
时间:
2012-1-4 12:13
因为你定义的private是类内部属性啊
当你要在外部修改肯定不行,而你在类内部定义一个修改该private的函数
权限为public时,在外部调用这个函数时,相当于函数修改这个private
而这个函数和private在同一个类中,private关键字对于他无效
也就是说private也包括这个函数在内,共同私有的,
private:同类中可以访问(当然包括在该类中创建自己的对象来访问)。
作者:
为梦而战
时间:
2012-1-4 12:32
可以这样理解:class MyValue {}是 OperatorsAndExpressions {}类的内部类,也就是OperatorsAndExpressions {}类的成员了。那class MyValue {}类中的private i;成员也还是 OperatorsAndExpressions {}类的成员了。这样的话在 OperatorsAndExpressions {}类中访问它的成员private i;就说的过去了吧!只是在 OperatorsAndExpressions {}类访问private i;的话的先创class MyValue {}类对象 必竟还是class MyValue {}类最清楚自己内部的成员。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2