重写 java 中的方法,然后将对象强制转换为父类行为
2022-09-04 07:21:47
我有一个父类 A,还有一个子类 B,B 覆盖了 A 中的方法 f。
public class A
{
public String f()
{
return "A";
}
}
public class B extends A
{
...
public String f()
{
return "B";
}
public static void main(String[] args)
{
B b = new B();
A a = (A) b;
System.out.println(b.f()); //prints: B
}
}
我创建了一个 B、B 类型的对象,并将其转换为类型 A,并将其分配给 A、 a 类型的变量,然后在 a 上调用方法 f。现在我希望调用父类的方法,因为我正在使用A类型的对象,但它没有,它调用了该方法的b版本(在下面的代码中打印“B”而不是“A”)。
为什么会这样?这是设计决策还是技术限制?