费话就少说了,直接上代码:
Chinese.java
[code="java"]
class Person {
void prt(String s) {
System.out.println("father--->" + s);
}
Person() {
prt("A Person.");
}
Person(String name) {
prt("A person name is:" + name);
}
}
public class Chinese extends Person {
@Override
void prt(String s) {
super.prt(s);
System.out.println("son--->" + s);
}
Chinese() {
super();
prt("A Chinese.");
}
Chinese(String name) {
super(name);
prt("his name is:" + name);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("kevin");
}
}
[/code]
按我的理解,输出结果应该是:
father--->A person.
father--->A Chinese.
son--->A Chinese.
father--->A person name is:kevin.
father--->his name is:kevin.
son--->his name is:kevin.
[color=red]但是结果却是:[/color]
father--->A Person.
son--->A Person.
father--->A Chinese.
son--->A Chinese.
father--->A person name is:kevin.
son--->A person name is:kevin.
father--->his name is:kevin.
son--->his name is:kevin.
这是为什么呀??请大家指教,谢谢啦!
[code="java"]
Person() {
prt("A Person.");
}
[/code]
这里是关键,子类构造函数实例化的时候,super()是调用父类构造函数,父类构造函数里面的prt已经被override了,所以这个时候调用的子类的prt,而不是调用父类的prt
在父类的prt中
[code="java"]
@Override
void prt(String s) {
super.prt(s);
System.out.println("son--->" + s);
}
[/code]
有调用父类的super.prt