【发布时间】:2015-04-18 02:36:51
【问题描述】:
假设我声明如下:
Cat elsa = new Lion();
狮子延伸猫。如果我这样声明,elsa 会是一只猫,拥有猫的所有方法,还是狮子,拥有狮子和猫的所有方法
我能找到的其他问题没有解决这个确切的问题。
【问题讨论】:
-
你为什么不试试看?
-
我试过了,在我看来好像它采用了声明的类型。是对的吗?我只是想确保我没有遗漏任何东西。
-
你没有遗漏任何东西,将 elsa 声明为 Cat 将它限制为仅由 Cat 实现的方法(但可以被 Lion 覆盖)。
-
将
Lion对象分配给Cat引用不会更改对象具有的方法(在运行时)。它改变了编译器允许你访问的方法(在编译时)。如果重要的是对象具有方法,那么 java 就会有鸭子类型。它没有。你可以通过强制转换来解决这个问题,但只会让人想知道你为什么首先要费心制作Cat类。Cat类型的全部意义在于说,“只要你能做猫能做的事,你就可以去这里成为Cat,没有什么比这更需要你做的了。