Comment voulez-vous remplacer le constructeur parent en Java?

Ampage vert:

J'ai actuellement une classe, Appelons-personne, avec un constructeur comme ainsi.

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;
    }
}

Ensuite, nous héritons la classe avec un type plus spécifique de la personne, dans ce cas, un employé.

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;
    }
}

Je suis désireux de le faire de telle sorte que l'employé imprime propre déclaration de quand l'objet est créé, mais il est en train d'imprimer à la fois la déclaration d'impression de personne et aussi des employés. Comment puis-je remplacer cette déclaration à empêcher que cela se passe? Y at-il une meilleure façon d'imprimer sur la console qui empêchera que cela se produise?

TJ Crowder:

Comment puis-je remplacer cette déclaration à empêcher que cela se passe?

Vous ne pouvez pas, à moins que vous pouvez modifier Personpour fournir un constructeur qui ne fait pas l' System.out.printlnappel. Une sous - classe doit appeler l' un de ses superclasse constructors.¹ Votre Personclasse n'a que celui, qui comprend l' System.out.printlnappel, donc Employeen'a pas d'autre choix que de l' appeler.

Ceci est l' une des raisons constructeurs ne devraient pas avoir des effets secondaires. Ni Personne Employeedevrait appeler System.out.println. Cela devrait être laissé à coder avec la classe, ou une méthode (plutôt que constructeur).


¹ Si vous ne le faites pas explicitement, le compilateur insère super()au début de votre constructeur. Dans votre cas, ce serait une erreur de compilation, car Personne dispose pas d' un constructeur sans paramètres.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=225927&siteId=1
conseillé
Classement