我构建了一个程序来测试Java继承,有几个类:
public class Animal {
String name = "";
String kind = "";
public Animal() {
System.out.println(desc());
}
public Animal(String name) {
this.name = name;
System.out.println(desc());
}
String desc() {
if (name == "") {
return "Je suis un animal.";
} else {
return "Je suis un animal de nom " + name + ".";
}
}
}
public class Mamifere extends Animal {
public Mamifere() {
System.out.println(desc());
}
public Mamifere(String name) {
this.name = name;
System.out.println(desc());
}
String desc() {
return super.desc() + " Je suis un mamifère.";
}
}
public class Homme extends Mamifere {
public Homme() {
System.out.println(desc());
}
public Homme(String name) {
this.name = name;
System.out.println(desc());
}
String desc() {
return super.desc() + " Je suis un homme.";
}
}
public class Chien extends Mamifere {
public Chien() {
System.out.println(desc());
}
public Chien(String name) {
this.name = name;
System.out.println(desc());
}
String desc() {
return super.desc() + " Je suis un chien.";
}
}
当我运行这段代码时:
public class TestAnimal {
public static void main(String[] args) {
Animal[] animaux = new Animal[5];
animaux[0] = new Animal("Truc");
animaux[1] = new Animal();
animaux[2] = new Chien("Medor");
animaux[3] = new Homme();
animaux[4] = new Homme("Robert");
}
}
我得到以下输出:
Je suis un animal de nom Truc.
Je suis un animal.
Je suis un animal. Je suis un mamifère. Je suis un chien.
Je suis un animal. Je suis un mamifère. Je suis un chien.
Je suis un animal de nom Medor. Je suis un mamifère. Je suis un chien.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal de nom Robert. Je suis un mamifère. Je suis un homme.
为什么从无参数构造函数构造的对象会有如此多的重复?
发布于 2018-10-22 07:01:36
由于Chien
扩展了Mammifere
,Mamifere
扩展了Animal
:当您想实例化Chien
时,它还构建了一个Mamifere
,因为它是一个超类型,所以它还构建了一个Animal
,因为它也是一个超类型
您看到的是由Chien
constructor
desc
方法,是由Mamifere
constructor
desc
方法,是由Animal
构造函数
启动的desc
方法<>F220>
在Homme
中也会发生同样的情况
https://stackoverflow.com/questions/52920607
复制相似问题