首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java构造函数被多次调用?

Java构造函数被多次调用?
EN

Stack Overflow用户
提问于 2018-10-22 06:55:02
回答 1查看 135关注 0票数 1

我构建了一个程序来测试Java继承,有几个类:

代码语言:javascript
复制
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.";
    }    
}

当我运行这段代码时:

代码语言:javascript
复制
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");

    }

}

我得到以下输出:

代码语言:javascript
复制
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.

为什么从无参数构造函数构造的对象会有如此多的重复?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 07:01:36

由于Chien扩展了MammifereMamifere扩展了Animal:当您想实例化Chien时,它还构建了一个Mamifere,因为它是一个超类型,所以它还构建了一个Animal,因为它也是一个超类型

您看到的是由Chien constructor

  • you're启动的desc方法,是由Mamifere constructor

  • you're启动的desc方法,是由Animal构造函数

启动的desc方法<>F220>

Homme中也会发生同样的情况

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52920607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档