¿Cómo se puede anular el constructor de los padres en Java?

Ampage verde:

Actualmente tengo una clase, vamos a llamarlo persona, con un constructor como tal.

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

A continuación, heredamos la clase con un tipo más específico de la persona, en este caso un empleado.

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

Estoy deseando que sea tal que Empleado imprime su propia declaración cuando se crea el objeto, sino que se está imprimiendo tanto la sentencia de impresión de una persona y también de Empleado. ¿Cómo puedo anular esta declaración para evitar que eso suceda? ¿Hay una mejor manera de imprimir en la consola que va a evitar que esto ocurra?

TJ Crowder:

¿Cómo puedo anular esta declaración para evitar que eso suceda?

No se puede, a menos que se puede editar Personpara proporcionar un constructor que no hace la System.out.printlnllamada. Una subclase debe llamar a uno de sus superclase constructors.¹ Su Personclase tiene sólo el uno, que incluye la System.out.printlnllamada, por lo que Employeeno tiene más remedio que llamarlo.

Esta es una de varias razones constructores no deben tener efectos secundarios. Ni Persontampoco Employeedebe estar llamando System.out.println. Eso debería dejarse en manos de código usando la clase, o un método (en lugar de constructor).


¹ Si no lo hace de forma explícita, el compilador insertará super()al principio de su constructor. En su caso, eso sería un error de compilación, porque Personno tiene un constructor con cero parámetros.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225929&siteId=1
Recomendado
Clasificación