java中的继承问题

时间:2014-12-12 21:51:53

标签: java inheritance

我在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;

  } 
}

我知道我需要使用演员..但在哪里?为什么代码不能编译?

在我看来似乎有一个“蜥蜴”对象引用“鬣蜥”(最后一行)。 我希望有一个人可以帮助我! :)

2 个答案:

答案 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,那么知道它可以被认为是一只蜥蜴。

如果你走另一条路 - 尝试将蜥蜴引用分配给鬣蜥 - 那么实际的物体可能是鬣蜥,或者它可能是其他类型的蜥蜴,所以你需要使用施法来告诉编译器"我知道我在做什么,这真的是一只鬣蜥。"