Java多态使用其超类变量创建子类对象

因此,我是一名学生,正在学习Java。有一个概念让我难以把握,希望有人可以为我提供一些启示。我的问题是关于多态性。例如,假设我有以下代码。

Animal a = new Lizard("Lizzy", 6);  //Lizard extends Animal

  1. 据我了解,由于变量类型是Animal,所以a将具有Animal的所有特征。但是,由于创建的对象是蜥蜴,因此将使用Lizard类中的所有重写方法,而不是Animal类中的方法。这是正确的吗?

  2. 另外,在创建时将使用哪个类构造函数?

谢谢你的帮助。我看起来很

回答:

1.据我了解,由于变量类型是Animal,所以a将具有Animal的所有特征。但是,由于创建的对象是蜥蜴,因此将使用Lizard类中的所有重写方法,而不是Animal类中的方法。这是正确的吗?

是的,你是对的。

2.此外,创建a时将使用哪个类构造函数?

          Animal a = new Lizard("Lizzy", 6);  //Lizard extends Animal

由于Lizard是Animal的子类,因此首先将调用Lizards构造函数,然后从Lizards构造函数进行调用,因为默认情况下,除非您调用

否则Lizard构造 中的第一行将是 。蜥蜴的 使用

。在Animal构造函数中,第一行将再次调用

。假设Animal不扩展任何类,则java.lang.Object's构造函数将像java.lang.Object每个对象的超类一样被调用。

  public Object() {

}

Class Animal {

public Animal(){

//there will be a super call here like super()

}

class lizard extends Animal {

public Lizard(your args) {

//there will be a super() call here and this call's animal's no-args constructor

}

}

}

  1. 蜥蜴的构造函数将被调用
  2. 除非对重载的构造函数进行this()调用,否则对super()进行调用,即,调用Animals no-args构造函数
  3. java.lang.Object的Constructor将使用super()从动物调用
  4. java.lang.Object的构造函数代码将执行
  5. 动物构造函数代码将执行
  6. 蜥蜴的构造函数代码将执行

以上是 Java多态使用其超类变量创建子类对象 的全部内容, 来源链接: utcz.com/qa/409873.html

回到顶部