Java多态使用其超类变量创建子类对象
因此,我是一名学生,正在学习Java。有一个概念让我难以把握,希望有人可以为我提供一些启示。我的问题是关于多态性。例如,假设我有以下代码。
Animal a = new Lizard("Lizzy", 6); //Lizard extends Animal
据我了解,由于变量类型是Animal,所以a将具有Animal的所有特征。但是,由于创建的对象是蜥蜴,因此将使用Lizard类中的所有重写方法,而不是Animal类中的方法。这是正确的吗?
另外,在创建时将使用哪个类构造函数?
谢谢你的帮助。我看起来很
回答:
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
}
}
}
- 蜥蜴的构造函数将被调用
- 除非对重载的构造函数进行this()调用,否则对super()进行调用,即,调用Animals no-args构造函数
- java.lang.Object的Constructor将使用super()从动物调用
- java.lang.Object的构造函数代码将执行
- 动物构造函数代码将执行
- 蜥蜴的构造函数代码将执行
以上是 Java多态使用其超类变量创建子类对象 的全部内容, 来源链接: utcz.com/qa/409873.html