下面有一段代码
public class Super {
public Super (){
System.out.println(this.toString());
}
public String toString(){
return "I am Super";
}
}
public class Sub extends Super {
public Sub() {
System.out.println(toString());
}
public String toString() {
return "I am SubClass";
}
}
public class test {
public static void main (String [] args){
Sub ss = new Sub();
}
}
//结果
我是子类
我是子类
根据理论,它应该先调用父类(super class)构造函数,然后再调用子类。 但是当我执行它时,它总是打印子类构造函数
最佳答案
虽然它会首先调用 super
类构造函数,但将调用的 toString()
方法是运行时类型的实现(如果有的话)。由于所创建的对象属于 Sub
类型,因此将调用 Sub
的 toString()
实现。这就是多态性的基础。
关于java - 父类(super class)和子类中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523796/