动态绑定 Java。对象是否具有其声明类型或实际类型的方法?

Dynamic Binding Java. Does an object have the methods of its declared type, or its actual type?

假设我声明如下:

Cat elsa = new Lion();

Lion 扩展了 Cat。如果我这样声明,elsa 是一只猫拥有一只猫的所有方法还是一只狮子,拥有这两种狮子的所有方法猫

这个问题在我能找到的其他问题中没有得到解决。

您创建的 对象Lion 类型并且具有 [=11] 的所有属性和方法=] 对象。 变量 elsaCat 类型,因此它只能用于访问 Cat对象。

所以你的问题的答案是 elsa 将是一个 Lion,你只能将其视为 Cat,除非你将其转换回 Lion .例如:

elsa.roar();          // compile error if the roar() method is only for Lion
((Lion)elsa).roar();  // will work