猿问

你如何覆盖 Java 中的父构造函数?

我目前有一个类,我们称之为 Person,有一个像这样的构造函数。


public class Person

{

    private String name;


    public Person(String name)

    {

        this.name = name;

        System.out.println("This person is: "+getName());

    }


    public String getName()

    {

        return this.name;

    }


    public void setName(String name)

    {

        this.name = name;

    }

}

然后我们用更具体的 Person 类型继承该类,在本例中为 Employee。


public class Employee extends Person

{

    private int id;


    public Employee(String name, int id)

    {

        super(name);

        this.id = id;

        System.out.println("This person is: "+getName()+", identified by #"+getId());

    }


    public int getId()

    {

        return this.name;

    }


    public void setId(int id)

    {

        this.id = id;

    }

}

我想让它在创建对象时 Employee 打印它自己的语句,但它同时打印来自 Person 和 Employee 的打印语句。如何覆盖此语句以防止发生这种情况?有没有更好的打印到控制台的方法来防止这种情况发生?


阿晨1998
浏览 152回答 3
3回答

阿波罗的战车

当您调用 时super,将调用父级的构造函数。无法避免:这就是super目的。如果您想println在创建对象时调用不同的s,则必须将其println放在构造函数之外。一个不错的选择是使用构建器或工厂模式,toString在Person和Employee类中覆盖,并toString从构建器或工厂调用。
随时随地看视频慕课网APP

相关分类

Java
我要回答