¿Una clase padre siempre se necesita un constructor por defecto o sin argumentos, incluso si la clase hijo ya tiene definido un constructor?

K Man:

No puedo conseguir el código para compilar.

class Horse {
    private int age;
    Horse(int age) {
        this.age = age;
    }
}

class Pony extends Horse {
    private int age;
    Pony(int age) { //here compiler complains about no default constructor in parent class
        this.age = age;
    }
}

Sé que debe definir un constructor para una clase hija cuando la clase padre tiene solamente constructores con parámetros, y eso es lo que he hecho. Sin embargo, el compilador se queja de que la clase padre no tiene constructor por defecto.

Tengo razón para concluir que una clase padre siempre necesita un defecto o constructor sin argumentos? ¿Y si quiero que el padre y la clase hija que sólo tienen constructores con parámetros?

JB Nizet:

Tengo razón para concluir que una clase padre siempre necesita un defecto o constructor sin argumentos?

No. La primera cosa que un constructor de la subclase debe hacer es invocar uno de los constructores de la superclase. Si no lo hace, entonces el compilador llama al constructor sin argumentos de la superclase para usted. Pero por supuesto que falla si la superclase no tiene uno.

El código debería ser:

class Pony extends Horse {
    Pony(int age) {
        super(age);
    }
}

Véase, la superclase ya cuenta con un campo de edad, y probablemente los métodos que utilizan ese campo. Así redeclarandolos la una de la subclase es equivocado y contraproducente.

Supongo que te gusta

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