我构建了一个程序来测试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.
为什么用参数少的构造函数构造的对象有这么多重复?
最佳答案
当Chien
扩展Mammifere
和Mamifere
扩展Animal
时:当您想实例化Chien
时,它还会构建Mamifere
作为超类型,因此它也会构建Animal
也是超级类型
您会看到desc
构造函数启动的Chien
方法
您会看到desc
构造函数启动的Mamifere
方法
您会看到desc
构造函数启动的Animal
方法
相同的情况在Homme
关于java - Java构造函数多次调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52920607/