我有一个父类 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”)下面的代码)。
为什么会这样呢?这是设计决定还是技术限制?
这是多态性的基础
它应该是这样工作的。
任何方法都是根据对象的实际类型而不是所引用的类型。
当您将对象转换为另一种类型时,您只需使用另一种类型来引用它。对象的实际类型没有改变。 (而且它永远不会改变)。
因此,您所观察到的行为符合预期,并且它的设计就是如此。这绝对不是一个限制。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)