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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 为梦而战 于 2011-12-20 00:59 编辑

       当我们使用ArrayList的add();方法将自定义对象加入ArrayList时,应该注意到add(Object obj);方法中参数是Object类型的,所以这时自定义对象就会被上升,转换成Object类型,而当我们定义了迭代器,用迭代器的Next()调用自定义对象的特有方法时,因为此时用Next();方法取出来的对象是Object类型的,Object类中没有自定义对象的特有方法可被调用,所以就出错了。我们应该在使用Next();方法之前先将用Next()取出来的对象降级转换成自定义类,然后再用自定义对象去调用它自己特有的方法、其实这也是多态在此处的体现。
示例:
public static void main(String[] args)
{
       ArrayList a1=new ArrayList();
    a1.add(new Person("zhangsan",25));     // 使用ArrayList的方法add();将自定义对象存入ArrayList。
                                       
    Iterator it=a1.iterator();     
       while(it.hasNext())
       {
               sop(it.Next().getName());     //我们可能会像输出方法中这样调用Person对象中的特有方法getName(),会错。
         Person  p=(Person)it.next();   //这一步才是正确的和必须的
         sop(p.getName());                 //这样调用才是正确的
    }
}

评分

参与人数 1黑马币 +2 收起 理由
郑健初 + 2 了解了,感谢

查看全部评分

2 个回复

正序浏览
嗯、是要加上泛型的,这样就不用强转了,这个1.5的新特性

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
admin + 1
为梦而战 + 2

查看全部评分

回复 使用道具 举报
使用集合时,应该加上泛型,这样就不会发生那样的问题。
  ArrayList<Person> a = new ArrayList<Person>();
  1. import java.util.*;
  2. class Person
  3. {
  4.         String name;
  5.         int age;
  6.         Person(String s,int i)
  7.         {
  8.                         this.name=s;
  9.                         this.age=i;
  10.         }       
  11.         String getName()
  12.         {
  13.                 return name;       
  14.         }
  15. }
  16. class Test
  17. {
  18.   public static void main(String[] args)
  19.   {
  20.                 ArrayList<Person> a = new ArrayList<Person>();
  21.                 a.add(new Person("zhangsan",25));                                             
  22.                 Iterator<Person>  it=a.iterator();     
  23.                 while(it.hasNext())
  24.                 {
  25.                  sop(it.next().getName());
  26.                 }

  27.   }
  28.         public static void sop(Object obj)
  29.         {
  30.                 System.out.println(obj);       
  31.         }
  32. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
admin + 1
为梦而战 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马