黑马程序员技术交流社区
标题:
类中私有变量的运用问题,求大神解答
[打印本页]
作者:
刘凯
时间:
2013-2-5 21:29
标题:
类中私有变量的运用问题,求大神解答
本帖最后由 刘凯 于 2013-2-6 16:18 编辑
/*
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。id相同,视为同一个人。为重复元素。
思路:
1,对人描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出。
*/
import java.util.*;
class person
{
private String name;
private int age;
private String id;
person(String name,int age,String id)
{
this.name = name;
this.age = age;
this.id = id;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String getId()
{
return id;
}
public boolean equals(Object obj)
{
if(!(obj instanceof person))
return false;
person p =(person)obj;
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());
//我认为第二种符合逻辑,第一种也能够实现,求原因???
}
}
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al1 = new ArrayList();
al1.add(new person("小明",20,"1234567890"));
al1.add(new person("小强",22,"1234567890"));
al1.add(new person("小红",20,"1234567892"));
al1.add(new person("小明",20,"1234567891"));
al1 = singleElement(al1);
for(Iterator it = al1.iterator();it.hasNext();)
{
person p = (person)it.next();
System.out.println("姓名:"+p.getName()+"\t年龄:"+p.getAge()+"\t身份证号:"+p.getId());
}
}
public static ArrayList singleElement(ArrayList al1)
{
ArrayList al2 = new ArrayList();
Iterator it = al1.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(!(al2.contains(obj)))
al2.add(obj);
}
return al2;
}
}
复制代码
如中间注释部分
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