黑马程序员技术交流社区
标题:
对象之间访问私有成员的问题
[打印本页]
作者:
周坤
时间:
2012-7-18 16:14
标题:
对象之间访问私有成员的问题
本帖最后由 周坤 于 2012-7-18 17:56 编辑
class Demo11
{
private int age;
public Demo11(int i)
{
age=i;
}
boolean compare(Demo11 anotherDemo)
{
if (this.age==anotherDemo.age)//为什么能编译通过?这里访问到了另一个类的私有变量,麻烦解释一下??
return true;
else
return false;
}
}
public class TestCompare
{
public static void main(String args[])
{
Demo11 aa=new Demo11(20);
Demo11 cc=new Demo11(22);
System.out.println(aa.compare(cc)?"年龄相等":"年龄不等");
}
}
复制代码
为什么能访问到呢?
作者:
袁錦泰
时间:
2012-7-18 16:16
被private修飾的成員變量在本類中是可以被訪問的.在其他類中就不可以了.
作者:
许庭洲
时间:
2012-7-18 16:22
class Demo11
{
private int age;//私有字段age
public Demo11(int i)
{
age=i;
}
boolean compare(Demo11 anotherDemo)
{
if (this.age==anotherDemo.age)//在本类中的方法当然有权限访问本类的私有字段了。
return true;
else
return false;
}
}
作者:
马林康
时间:
2012-7-18 16:25
许庭洲 发表于 2012-7-18 16:22
class Demo11
{
private int age;//私有字段age
技术分这么多:funk:
作者:
陈冲
时间:
2012-7-18 16:59
<ol><li>class Demo11
</li><li>{
</li><li> private int age;
</li><li> public Demo11(int i)
</li><li> {
</li><li> age=i;
</li><li> }
</li><li> boolean compare(Demo11 anotherDemo)
</li><li> {
</li><li> if (this.age==anotherDemo.age)//该语句中anotherDemo.age,是通过Demo11创建的对象来访问自己内部的私有成员
</li><li> return true;
</li><li> else
</li><li> return false;
</li><li> }
</li><li>}
</li><li>
</li><li>public class TestCompare
</li><li>{
</li><li> public static void main(String args[])
</li><li> {
</li><li> Demo11 aa=new Demo11(20);
</li><li> Demo11 cc=new Demo11(22);
</li><li> System.out.println(aa.compare(cc)?"年龄相等":"年龄不等");
</li><li> }
</li><li>
</li><li>}</li></ol>
复制代码
使用private修饰的成员,只能在本类中访问,而你的if (this.age==anotherDemo.age)中,a
notherDemo是Demo11创建的对象,anotherDemo.age是通过对象访问自己内部的私有成员,
这样是能够访问的。
作者:
侯茂绵
时间:
2012-7-18 17:13
{:soso_e101:}因为你私有化啦
作者:
陌花╮有意、
时间:
2012-7-18 17:15
这相当于是在本类中访问自己的私有属性是不受限制的
作者:
周坤
时间:
2012-7-18 21:18
哦,谢谢大家了,同一个类的不同对象之间可以访问对象的private成员变量和方法。原来是因为访问控制是在类的级别上,而不是在对象的级别上。
作者:
于星星
时间:
2012-7-18 21:49
本帖最后由 于星星 于 2012-7-18 22:26 编辑
//所谓的私有成员不能访问,是指在外部类中被访问,如下代码示例:
class Stu {
public String name="zhangsan";
private int age=24;
}
public class TestStu {
public static void main(String[] args) {
Stu student = new Stu();
System.out.println(student.name);
//
System.out.println(student.age); //不能被访问到
}
}
//而你所提供的代码是在Demo11类内部,所以能够访问到私有成员
class Demo11
{
private int age;
public Demo11(int i)
{
age=i;
}
boolean compare(Demo11 anotherDemo)
{
if (this.age==anotherDemo.age) //在Demo11类内部自然就可以访问
return true;
else
return false;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2