1.据我了解,由于变量类型是Animal,所以a将具有Animal的所有特征。但是,由于创建的对象是蜥蜴,因此将使用Lizard类中的所有重写方法,而不是Animal类中的方法。这是正确的吗?
是的,你是对的。
2.此外,创建a时将使用哪个类构造函数?
Animal a = new Lizard("Lizzy", 6); //Lizard extends Animal由于Lizard是Animal的子类,因此首先将调用Lizards构造函数,然后从Lizards构造函数进行调用,因为默认情况下,除非您调用 重载,
否则Lizard构造 函数 中的第一行将是 super() 。蜥蜴的 构造函数 使用 this()
。在Animal构造函数中,第一行将再次调用 super()
。假设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的构造函数代码将执行
- 动物构造函数代码将执行
- 蜥蜴的构造函数代码将执行



