好吧,我已经通过googleing查找了文档,但是我还没有找到任何真正描述了我想要回答的内容,所以在这里我问你们。了解Java中的继承和抽象类
所以我得到继承,以及它是如何工作的。我遇到问题时有时会看到最初定义为一种类型的对象,并设置为不同类型,并且我不明白到底发生了什么。这里有一个例子:
说我有一个类的动物,并扩展动物类猫和狗。猫,动物和狗都有一种方法说话()为猫打印“喵”和狗打印“woof”和为动物“不会说话”。
好吧,最后这里是我的问题。如果一个猫(c)然后运行Animal a = c ;?如果我运行a.speak();会发生什么情况;?哪种说法叫做?当我改变那种类型时究竟发生了什么?我会有任何真正的理由来使用它吗?
就抽象方法而言,我的问题是具有它们的意义究竟是什么?在我看到的例子中,他们已经被放入了超类,而它们下面的类定义了确切的行为。把一个抽象方法放在一个超类中是需要它下面的所有类来实现它的吗?
感谢您的帮助!
子类型多态性解释'a.speak()',但它不能解释为什么Cat可以隐式地赋值给Animal。一些更多的细节(JLS链接会很好),这将是一个很好的答案。 – 2010-12-10 23:50:07
第5.2节包含*可分配*要求。 http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184206。如下检查“编译时参考类型S(源)的值到编译时参考类型T(目标)的变量的赋值如下”。 – 2010-12-10 23:57:03
由于Cat延伸Animal,因此'Cat'可以隐式分配给'Animal'。一般来说,如果'A'扩展了'B',那么'A'可以被赋予'B'。如果'A'实现了一个接口'C',那么它可以被分配给'C'。这些关系是可传递的,所以如果'X'扩展'Y'继而扩展'Z',那么'X'的一个实例可以被分配给一个被声明为'X','Y'或'Z'中任一个的变量。 。 – 2010-12-11 00:03:37