黑马程序员技术交流社区

标题: 对象之间访问私有成员的问题 [打印本页]

作者: 周坤    时间: 2012-7-18 16:14
标题: 对象之间访问私有成员的问题
本帖最后由 周坤 于 2012-7-18 17:56 编辑
  1. class Demo11
  2. {
  3.         private int age;
  4.         public Demo11(int i)
  5.         {
  6.                 age=i;
  7.         }
  8.         boolean compare(Demo11 anotherDemo)
  9.         {
  10.                 if (this.age==anotherDemo.age)//为什么能编译通过?这里访问到了另一个类的私有变量,麻烦解释一下??
  11.                     return true;
  12.                 else
  13.                         return false;
  14.         }
  15. }

  16. public class TestCompare
  17. {
  18.         public static void main(String args[])
  19.         {
  20.                 Demo11 aa=new Demo11(20);
  21.                 Demo11 cc=new Demo11(22);
  22.                 System.out.println(aa.compare(cc)?"年龄相等":"年龄不等");
  23.         }

  24. }
复制代码
为什么能访问到呢?
作者: 袁錦泰    时间: 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
  1. <ol><li>class Demo11

  2. </li><li>{

  3. </li><li>        private int age;

  4. </li><li>        public Demo11(int i)

  5. </li><li>        {

  6. </li><li>                age=i;

  7. </li><li>        }

  8. </li><li>        boolean compare(Demo11 anotherDemo)

  9. </li><li>        {

  10. </li><li>                if (this.age==anotherDemo.age)//该语句中anotherDemo.age,是通过Demo11创建的对象来访问自己内部的私有成员

  11. </li><li>                    return true;

  12. </li><li>                else

  13. </li><li>                        return false;

  14. </li><li>        }

  15. </li><li>}

  16. </li><li>

  17. </li><li>public class TestCompare

  18. </li><li>{

  19. </li><li>        public static void main(String args[])

  20. </li><li>        {

  21. </li><li>                Demo11 aa=new Demo11(20);

  22. </li><li>                Demo11 cc=new Demo11(22);

  23. </li><li>                System.out.println(aa.compare(cc)?"年龄相等":"年龄不等");

  24. </li><li>        }

  25. </li><li>

  26. </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类内部,所以能够访问到私有成员





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