【发布时间】:2021-05-06 10:33:26
【问题描述】:
如下所示,我尝试将子类的对象转换为其父类的对象。那进展顺利。但是,当我尝试访问父类的重写方法时,它不会发生。而是调用子类中的覆盖方法。我知道我可以使用 super 关键字来做到这一点,但我只想知道为什么不能通过强制转换来做到这一点?
这是父类:
public class Parent {
public void print() {
System.out.println("In parent");
}
}
这是从父类继承其属性的子类:
public class Child extends Parent{
public void print() {
System.out.println("In child");
}
}
这是包含主要方法的类:
public class Main {
public static void main(String[] args) {
Child child = new Child();
((Parent)child).print();
}
}
【问题讨论】:
-
因为您不是在 class 上调用方法,而是在 instance 上调用方法。而且您使用的实例始终是
Child类型,无论您使用什么类型。 -
你需要有另一个调用 super 的方法。
-
一旦我将
Child对象转换为Parent对象,它不会是父对象吗?如果不是,为什么? -
"一旦我将 Child 对象转换为 Parent 对象,它就不是父对象了吗?"不,它不会。它应该如何成为另一个对象?它仍然是同一个对象!
-
@S.Tiss 因为
Child对象将始终是Child对象。您可以将其转换为parent对象,因为它是从它扩展而来的。
标签: java oop inheritance overriding subclass