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

时间:2015-04-18 02:36:51

标签: java dynamic binding

我说声明如下:

Cat elsa = new Lion();
狮子扩展了猫。如果我以这种方式宣布,elsa将是一只拥有所有猫的方法的猫或者它是狮子,拥有狮子和猫的所有方法

我可以找到的其他问题没有解决这个问题。

1 个答案:

答案 0 :(得分:2)

您创建的 对象 属于Lion类型,并具有Lion对象的所有属性和方法。 变量 elsa但是类型为Cat,因此它只能用于访问Cat对象的方法和属性。

因此,您的问题的答案是elsa将是Lion,您只能将其视为Cat,除非您将其转回Lion。例如:

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