我在java中有一个关于继承的非常简单的问题。 代码可能看起来不太引人注目,但它与基础知识有关 继承和我只是没有看到为什么代码根本不起作用的问题。 这是代码:
class Lizard {}
class Iguana extends Lizard {}
class TestDriver {
public static void main(String[] args) {
Iguana iguana1 = new Iguana();
Lizard lizard1 = new Lizard();
Lizard lizard2 = iguana1;
}
}
我知道我需要使用演员..但在哪里?为什么代码不能编译?
在我看来似乎有一个“蜥蜴”对象引用“鬣蜥”(最后一行)。 我希望有一个人可以帮助我! :)
答案 0 :(得分:5)
我知道我需要使用演员..但在哪里?
不,在这种情况下,您不需要任何演员。
Iguana iguana1 = new Iguana(); // Ok: Iguana can be assigned to Iguana
Lizard lizard1 = new Lizard(); // Ok: Lizard can be assigned to Lizard
Lizard lizard2 = iguana1; // Ok since an Iguana *is a* Lizard
为什么代码不能编译?
它 编译。我只是检查了自己。
答案 1 :(得分:1)
你不需要使用演员,因为鬣蜥是蜥蜴的一个子类。因此,如果编译器看到一只Iguana,那么知道它可以被认为是一只蜥蜴。
如果你走另一条路 - 尝试将蜥蜴引用分配给鬣蜥 - 那么实际的物体可能是鬣蜥,或者它可能是其他类型的蜥蜴,所以你需要使用施法来告诉编译器"我知道我在做什么,这真的是一只鬣蜥。"