求大神!!关于毕老师视频中 ArrayListTest2 的一点问题

sinat_26474589 2015-05-12 06:55:09
import java.util.*;
class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
//add(Object obj) ~~ Object obj = new Person("al 01",21);
al.add( new Person("al 01",21) );
al.add( new Person("al 02",22) );
al.add( new Person("al 01",21) );
al.add( new Person("al 03",23) );
al.add( new Person("al 01",21) );
al.add( new Person("al 04",24) );
al.add( new Person("al 05",25) );
al.add( new Person("al 03",23) );


for (Iterator it = al.iterator(); it.hasNext(); )
{
//需进行对象的上转型,否则在编译时编译器在ArrayList的父类Object中找不到get方法
Person ps = (Person)it.next();
System.out.println("消除前:" + ps.getName() + "***" + ps.getAge() );
}

al = SingleElement.single(al);

for (Iterator it = al.iterator(); it.hasNext(); )
{
//需进行对象的上转型,否则在编译时编译器在ArrayList的父类Object中找不到get方法
Person ps = (Person)it.next();
System.out.println("消除后:" + ps.getName() + "***" + ps.getAge() );
}
}
}
class SingleElement
{
private static ArrayList newAl = new ArrayList();
public static final ArrayList single(ArrayList al)
{
Object obj ;
for (Iterator it = al.iterator() ; it.hasNext() ; )
{
obj = it.next();
if ( !newAl.contains(obj) )
newAl.add(obj);
}
return newAl;
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
setName(name);
setAge(age);
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}

public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}

public boolean equals(Object obj)
{
if ( !(obj instanceof Person) )
return false;
Person ps = (Person)obj;
//System.out.println( this.getName() + "..." + ps.getName() );
/*
????????
this代表al中的一个元素,即Person对象,但在初始化时 Object obj = new Person()
那么this在这里为什么不用先转型为Person,才能使用get方法呢?
是因为this直接代表new Person()吗?所以this.getName()等同于new Person().getName();?
*/
return this.getName().equals( ps.getName() ) && this.getAge() == ps.getAge();
}
}



问题如下:
equals方法中 this代表al中的一个元素,
即 :obj = it.next();
if ( !newAl.contains(obj) ) 中的obj
也就是Person对象,但在初始化时 Object obj = new Person(), 那么this在这里为什么不需要像 main方法中的for循环中的it.next()一样 先转型为Person,才能使用get方法呢?
是因为this直接代表new Person()吗?所以this.getName()等同于new Person().getName();?

多谢啦!!!
...全文
69 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-05-12
  • 打赏
  • 举报
回复
在设计类时,如果设计对象方法,如何来表示生成的对象自己呢 this由此而生,表示调用该方法的对象本身 比如 你设计的类的实例a调用了getName(),那么this就代表a, 既然就是类的直接实例化,当然不需要类型转换 而it.next();public boolean equals(Object obj)等等为什么要强制向下转型呢 主要是为了适应大众,谁知道你里面要放什么啊,谁知道你要和谁比啊 比较时具体比较什么,这个时候你得向下转型后才知道 另外:集合ArrayList已经被ArrayList<E>泛型类更有效的代替,所以这个时候它知道自己里面存的什么了 取出来也就是对应的E类型了,就不用强制转型了
kivi_YG 2015-05-12
  • 打赏
  • 举报
回复
我感觉我认同你的猜测,不过希望大神能给个确定的答复,因为this代表了当前对象的一个引用,可将其理解为对象的另一个名字,通过这个就可以调用对象的方法了!所以我感觉this.getName()也就等同于new Person().getName();

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧