如下所示,我尝试将子类的对象强制转换为其父类的对象。进展顺利。但是,当我试图访问父类的重写方法时,它不会发生。而是调用子类中的重写方法。我知道我可以使用超级关键字做到这一点,但我只是想知道为什么这不能通过强制转换来完成?
这是父类:
public class Parent {
public void print() {
System.out.println("In parent");
}
}
这是子类,它的属性继承自父类:
public class Child extends Parent{
public void print() {
System.out.println("In child");
}
}
这个类包含main方法:
public class Main {
public static void main(String[] args) {
Child child = new Child();
((Parent)child).print();
}
}
说明
在你的例子中,对象总是Child
。强制转换仅应用于引用变量。此强制转换不会影响实际对象。
- 正如其他人提到的,添加一个单独的方法来调用
super.()
或使用隐藏。隐藏实际上并不是重写。
注意隐藏
的副作用public class AccessParent {
public static void main(String[] args) {
Parent p = new Child();
p.methodC();
System.out.println(new String(new char[20]).replace("