simple resueltos polimorfismo herencia heredar ejercicios ejemplos definicion java constructor

resueltos - polimorfismo en java



¿Una subclase hereda a los constructores de su super clase? (5)

En una subclase podemos inicializar los miembros de datos utilizando el constructor de la subclase que internamente llama al constructor de la superclase super() . Si una subclase no puede heredar constructores de su superclase, ¿cómo puede la llamada super() inicializar la superclase?


En primer lugar, los constructores no son miembros de clases, y solo los miembros se heredan.

En segundo lugar, podemos imaginar casos en los que no queremos que las subclases tengan los mismos constructores que la clase principal.

Imagine un vehículo de clase abstracta con un vehículo constructor (ruedas int) y una bicicleta de subclase.

Por definición, una Bicicleta tiene 2 ruedas, por lo que podemos imaginar que el constructor de la Bicicleta llamará super (2) y, ¿no es mejor en este caso que la Bicicleta no exponga una Bicicleta del constructor (ruedas int)?


Ninguna subclase no puede heredar los constructores de su superclase.

Los constructores son miembros de funciones especiales de una clase en el sentido de que no son heredados por la subclase. Los constructores se utilizan para dar un estado válido para un objeto en la creación.

Una de las razones principales es porque probablemente no quiera sobrescribir el constructor de superclases, lo que sería posible si se heredaran. Al darle al desarrollador la capacidad de anular un constructor de superclases, se erosionaría la capacidad de encapsulación del lenguaje.

Ver también: Los constructores nunca se heredan.


No. En absoluto Nunca ... Una Subclase no hereda su constructor de Superclase ... en vez de eso, puede llamar a su Constructor de Superclase usando la palabra clave "super ()" ...


Un constructor de una subclase puede llamar constructores de la superclase, pero no se heredan como tales.

Para ser claro, eso significa que si tienes algo como:

public class Super { public Super(int x) { } } public class Sub extends Super { public Sub() { super(5); } }

entonces no puedes escribir:

new Sub(10);

porque no hay constructor Sub(int) .

Puede ser útil pensar en los constructores como métodos estáticos no heredados con un parámetro implícito del objeto que se está inicializando.

De la especificación del lenguaje Java, sección 8.8 :

Las declaraciones de los constructores no son miembros. Nunca se heredan y, por lo tanto, no están sujetos a ocultación o anulación.


super es una palabra clave de Java para referirse a la superclase, y super() es la forma de llamar al constructor de su superclase. El constructor no se hereda pero todavía puedes llamarlo.