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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 代臣 黑马帝   /  2012-3-20 10:52  /  1849 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 代臣 于 2012-3-20 11:40 编辑

/*
Student继承Person之后,Student类中又重写了Person类中的getName方法,而且重写的内容是一样的。
只是做了这点改变,输出结果却是
null123
null123
null123
如果不复写,结果是
abc---1123
abc---2123
abc---4123
请知道的解释下,谢谢!
*/
  1. import java.util.*;
  2. class GenericDemo8
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList<Person> al = new ArrayList<Person>();
  7.                 al.add(new Person("abc1"));
  8.                 al.add(new Person("abc2"));
  9.                 al.add(new Person("abc4"));
  10.                 //printColl(al);

  11.                 ArrayList<Student> all = new ArrayList<Student>();
  12.                 all.add(new Student("abc---1"));
  13.                 all.add(new Student("abc---2"));
  14.                 all.add(new Student("abc---4"));
  15.                 printColl(all);
  16.         }
  17.         public static void printColl(ArrayList<? extends Person> al)
  18.         {
  19.                 for(Iterator<? extends Person> it = al.iterator(); it.hasNext(); )
  20.                 {
  21.                         sop(it.next().getName());
  22.                 }
  23.         }
  24.         public static void sop(Object obj)
  25.         {
  26.                 System.out.println(obj);
  27.         }
  28. }
  29. class Person
  30. {
  31.         private String name;
  32.         Person(String name)
  33.         {
  34.                 this.name = name;
  35.         }
  36.         public String getName()
  37.         {
  38.                 return name;
  39.         }
  40. }
  41. class Student extends Person
  42. {
  43.         private String name;
  44.         Student(String name)
  45.         {
  46.                 super(name);
  47.         }
  48.         public String getName()
  49.         {
  50.                 return name;
  51.         }
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

2 个回复

倒序浏览
yocean 发表于 2012-3-20 11:05

嗯,我犯了一个错误,利用super(name);调用父类构造器的时候初始化的是父类的变量name,而父类的变量name是private的,因而子类在调用getName方法的时候访问不到已经初始化的name,只能调用自己的name,而这个name是没有初始化的。当时没有考虑到这点,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马