黑马程序员技术交流社区

标题: 关于private属性 [打印本页]

作者: 孙利川    时间: 2012-4-5 18:36
标题: 关于private属性
class Student
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        int compareTo_1(Student s)
        {
                return this.age-s.age;        //age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。        }
        String getName()
        {
                return name;
        }
        int getAge()
        {
                return age;
        }
        public static void main(String[] args)
        {
                Student s1 = new Student("zhangsan",19);
                Student s2 = new Student("lisi",21);
                System.out.println(s1.compareTo_1(s2));
        }
}
作者: yangshang1    时间: 2012-4-5 18:50
private 自己类中或自己的对象
public 所有的类中
default 在同一个包中
protected 在子类中其他类不可使用了
作者: 宋蕈    时间: 2012-4-5 19:22
你的两个age始终都是属于在类中使用,只是两个对象不一样而已。
作者: 江远云    时间: 2012-4-5 19:42
  //age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。
s的age是形式参数是个变量,age在Student类中的形式参数,所以可以访问自己类中被private修饰的age。这个方法是本类内部的。
作者: 邓斌    时间: 2012-4-5 20:02
楼主代码复制后有错误。改后输出19
class Student
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        int compareTo_1(Student s)
        {
                return this.age=age;  
                }//age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。        }
        String getName()
        {
                return name;
        }
        int getAge()
        {
                return age;
        }
        public static void main(String[] args)
        {
                Student s1 = new Student("zhangsan",19);
                Student s2 = new Student("lisi",21);
                System.out.println(s1.compareTo_1(s2));
        }
}

本代码中就一个类。。private似有可以在本类中使用。无疑问。在其他类中使用private修饰的属性。可在private类中创建方法。输出。在外部类中创建对象。调用private方法。
作者: 邓斌    时间: 2012-4-5 20:05
输出21
class Student
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        int compareTo_1(Student s)
        {
                return this.age=s.age;  //加s.  
                }//age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。        }
        String getName()
        {
                return name;
        }
        int getAge()
        {
                return age;
        }
        public static void main(String[] args)
        {
                Student s1 = new Student("zhangsan",19);
                Student s2 = new Student("lisi",21);
                System.out.println(s1.compareTo_1(s2));
        }
}

作者: 郑苑东    时间: 2012-4-5 20:15
本帖最后由 郑苑东 于 2012-4-5 20:17 编辑

s同样是在Student的一个对象。你的int compareTo_1(Student s)方法是在Student类中所以可以。。自己的自己类中用自己的两个对象。判断对象里面的内容。。。在自己的类中即使是私有的也可以同过  对象.age来调用。。。
作者: 孙国军    时间: 2012-4-5 20:29
  return this.age-s.age;        //age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。        }



你的age本来就在一个类中啊

作者: 薛飞飞    时间: 2012-4-5 22:04
return this.age-s.age;--------------->你的thiss都是代表Student这个类...因此它们自然能通过类名.的方式调用它们的属性
作者: niceBoy    时间: 2012-4-5 23:10

private是只能在类内部进行访问
s是Student类的对象引用,age不就在Student类中呀!自己的东西自己当然能用
作者: 刘_浩    时间: 2012-4-6 11:39
本帖最后由 liuhao411 于 2012-4-6 11:40 编辑

哥们,你的写的这段程序只有一个类,那就是student{}
class A{private int age;}
class B{这里面才不能直接访问A类中的age}
现在相信你明白了。多理解一下类,对象就是靠它在起作用的。
作者: 王永旺    时间: 2012-4-6 12:02
事情是这个样子滴
class Student
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        int compareTo_1(Student s)
        {
                return this.age-s.age;        //   Student是一个类,只要还没有出下面的大括号就还是类Student的地盘,所以是age是可以使用的   
}


权限问题可以看下面的表

123.jpg (17.58 KB, 下载次数: 53)

123.jpg

作者: 黑马-王言龙    时间: 2012-4-6 12:21
private的访问权限是自己的类。你定义的compareTo_1(Student  s)方法是自己类中的方法。当调用时,传给它的是Student对象,这个对象的所有属性方法都是同类可以访问的。




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