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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙利川 中级黑马   /  2012-4-5 18:36  /  2983 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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));
        }
}

12 个回复

倒序浏览
private 自己类中或自己的对象
public 所有的类中
default 在同一个包中
protected 在子类中其他类不可使用了
回复 使用道具 举报
你的两个age始终都是属于在类中使用,只是两个对象不一样而已。
回复 使用道具 举报
  //age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。
s的age是形式参数是个变量,age在Student类中的形式参数,所以可以访问自己类中被private修饰的age。这个方法是本类内部的。
回复 使用道具 举报
楼主代码复制后有错误。改后输出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方法。
回复 使用道具 举报
输出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:17 编辑

s同样是在Student的一个对象。你的int compareTo_1(Student s)方法是在Student类中所以可以。。自己的自己类中用自己的两个对象。判断对象里面的内容。。。在自己的类中即使是私有的也可以同过  对象.age来调用。。。
回复 使用道具 举报
  return this.age-s.age;        //age不是私有字段吗,为什么s的age字段能在这里直接访问呀,私有字段不是只能在类内部进行访问吗,比如在getAge()方法中可以访问。        }



你的age本来就在一个类中啊
回复 使用道具 举报
return this.age-s.age;--------------->你的thiss都是代表Student这个类...因此它们自然能通过类名.的方式调用它们的属性
回复 使用道具 举报

private是只能在类内部进行访问
s是Student类的对象引用,age不就在Student类中呀!自己的东西自己当然能用
回复 使用道具 举报
本帖最后由 liuhao411 于 2012-4-6 11:40 编辑

哥们,你的写的这段程序只有一个类,那就是student{}
class A{private int age;}
class B{这里面才不能直接访问A类中的age}
现在相信你明白了。多理解一下类,对象就是靠它在起作用的。
回复 使用道具 举报
事情是这个样子滴
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, 下载次数: 52)

123.jpg
回复 使用道具 举报
黑马-王言龙 来自手机 中级黑马 2012-4-6 12:21:57
13#
private的访问权限是自己的类。你定义的compareTo_1(Student  s)方法是自己类中的方法。当调用时,传给它的是Student对象,这个对象的所有属性方法都是同类可以访问的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马