我有这个代码:
public class Superclass {
public void print() {
System.out.println("super");
}
}
public class Subclass extends Superclass {
public void print() {
System.out.println("sub");
}
}
然后是这个:
Subclass obj4 = new Subclass();
((Superclass) obj4).print();
我认为上面的打印语句打印“super”,因为它被转换为父类(super class),但事实并非如此 - 它打印“sub”。这是为什么?
最佳答案
类型的向上转型并没有什么不同。调用哪个 toString()
由实例的运行时类型决定,而不是引用。
由于 Subclass
覆盖了 Superclass
的 toString,因此调用任何 Subclass
实例将始终解析为 Subclass
的到字符串。
Object obj = new Subclass();
obj.toString(); // will still return "sub"
关于java - 为什么这不打印 "super"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19172157/