黑马程序员技术交流社区

标题: 类中私有变量的运用问题,求大神解答 [打印本页]

作者: 刘凯    时间: 2013-2-5 21:29
标题: 类中私有变量的运用问题,求大神解答
本帖最后由 刘凯 于 2013-2-6 16:18 编辑
  1. /*
  2. 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

  3. 比如:存人对象。id相同,视为同一个人。为重复元素。


  4. 思路:
  5. 1,对人描述,将数据封装进人对象。
  6. 2,定义容器,将人存入。
  7. 3,取出。




  8. */
  9. import java.util.*;
  10. class person
  11. {
  12. private String name;
  13. private int age;
  14. private String id;
  15. person(String name,int age,String id)
  16. {
  17. this.name = name;
  18. this.age = age;
  19. this.id = id;
  20. }
  21. public String getName()
  22. {
  23. return name;
  24. }
  25. public int getAge()
  26. {
  27. return age;
  28. }
  29. public String getId()
  30. {
  31. return id;
  32. }
  33. public boolean equals(Object obj)
  34. {
  35. if(!(obj instanceof person))
  36. return false;
  37. person p =(person)obj;
  38. return this.id.equals(p.id);              //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
  39. //return this.id.equals(p.getId());          //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
  40.                                                               // 第1种. return this.id.equals(p.id);   第2种. return this.id.equals(p.getId());
  41.                                                                     //我认为第二种符合逻辑,第一种也能够实现,求原因???
  42. }
  43. }

  44. class ArrayListTest
  45. {
  46. public static void main(String[] args)
  47. {
  48. ArrayList al1 = new ArrayList();
  49. al1.add(new person("小明",20,"1234567890"));
  50. al1.add(new person("小强",22,"1234567890"));
  51. al1.add(new person("小红",20,"1234567892"));
  52. al1.add(new person("小明",20,"1234567891"));

  53. al1 = singleElement(al1);
  54. for(Iterator it = al1.iterator();it.hasNext();)
  55. {
  56. person p = (person)it.next();
  57. System.out.println("姓名:"+p.getName()+"\t年龄:"+p.getAge()+"\t身份证号:"+p.getId());
  58. }
  59. }

  60. public static ArrayList singleElement(ArrayList al1)
  61. {
  62. ArrayList al2 = new ArrayList();
  63. Iterator it = al1.iterator();
  64. while(it.hasNext())
  65. {
  66. Object obj = it.next();

  67. if(!(al2.contains(obj)))
  68. al2.add(obj);

  69. }

  70. return al2;
  71. }
  72. }
复制代码
如中间注释部分
return this.id.equals(p.id);              //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
//return this.id.equals(p.getId());          //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
                                                              // 第1种. return this.id.equals(p.id);   第2种. return this.id.equals(p.getId());
                                                                    //我认为第二种符合逻辑,第一种也能够实现,求原因???


作者: 胡发友    时间: 2013-2-5 21:43
这是在一个类中呢?一个类中当然可以调用自己的私有成员,比如,你有辆单车,难道你自己都不可以用这两单车?
作者: 刘凯    时间: 2013-2-5 22:08
胡发友 发表于 2013-2-5 21:43
这是在一个类中呢?一个类中当然可以调用自己的私有成员,比如,你有辆单车,难道你自己都不可以用这两单车 ...

我是说  比如  
public boolean function(类名 b)
{
this.id.equals(b.id);   
}


a.function()  
现在是在调用a 对象里的function() 方法   其中方法里的this.id必然时刻以直接调用的  然而b.id为什么可以这样直接调用, 搞不明白, 现在调用的方法是a对象的function()  方法啊  
作者: 胡发友    时间: 2013-2-6 08:39
1、如果你传入的是同一个类型的对象,当然是可以调用,
2、注意你所谓的a,b都是对象的引用,不是实际对象;
3、引用a,引用b,都是在同一个类里初始化,b.id当然是可以直接用的;

作者: 胡发友    时间: 2013-2-6 08:41
class Person{
        private String id ;
        Person(String id){
                this.id = id;
        }
        public String toString(){
                return id;
        }
}
class Test{
        public static void main(String [] args){
                //创建两个Person类型对象的引用
                //
                Person p1 = new Person("abc");
                Person p2 = new Person("bcd");
                //
                System.out.println(p1.toString());
                System.out.println(p2.toString());
        }
}

就像这个代码,p1和p2,都是person类型的对象引用,他们也都可以调用自己的toString方法,来获取数据
作者: walkonby    时间: 2013-2-6 09:13
私有对象就是拿来给本类用的  你要是在本类中都不可以调用那建立这个变量来干什么
p.id p.getId() 都是访问方式  在这个类外面你访问不到private修饰的就只能访问提供的方法 但是在类中你能访问自己私有的东西为什么不能访问呢?




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