黑马程序员技术交流社区
标题:
子类继承父类的问题【已解决】
[打印本页]
作者:
代臣
时间:
2012-3-20 10:52
标题:
子类继承父类的问题【已解决】
本帖最后由 代臣 于 2012-3-20 11:40 编辑
/*
Student继承Person之后,Student类中又重写了Person类中的getName方法,而且重写的内容是一样的。
只是做了这点改变,输出结果却是
null123
null123
null123
如果不复写,结果是
abc---1123
abc---2123
abc---4123
请知道的解释下,谢谢!
*/
import java.util.*;
class GenericDemo8
{
public static void main(String[] args)
{
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("abc1"));
al.add(new Person("abc2"));
al.add(new Person("abc4"));
//printColl(al);
ArrayList<Student> all = new ArrayList<Student>();
all.add(new Student("abc---1"));
all.add(new Student("abc---2"));
all.add(new Student("abc---4"));
printColl(all);
}
public static void printColl(ArrayList<? extends Person> al)
{
for(Iterator<? extends Person> it = al.iterator(); it.hasNext(); )
{
sop(it.next().getName());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
private String name;
Student(String name)
{
super(name);
}
public String getName()
{
return name;
}
}
复制代码
作者:
代臣
时间:
2012-3-20 11:38
yocean 发表于 2012-3-20 11:05
嗯,我犯了一个错误,利用super(name);调用父类构造器的时候初始化的是父类的变量name,而父类的变量name是private的,因而子类在调用getName方法的时候访问不到已经初始化的name,只能调用自己的name,而这个name是没有初始化的。当时没有考虑到这点,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2