¿Por qué los constructores no se heredan en Java?

Constructor es un bloque de código que le permite crear un objeto de clase y tiene el mismo nombre que la clase sin un tipo de retorno explícito.

Cada vez que una clase (clase secundaria) amplía otra clase (clase principal), la subclase hereda el estado y el comportamiento en forma de variables y métodos de su superclase, pero no hereda el constructor de la superclase por las siguientes razones:

  • Los constructores son especiales y tienen el mismo nombre que el nombre de la clase. Entonces, si los constructores se heredaron en la clase secundaria, la clase secundaria contendría un constructor de clase principal que está en contra de la restricción de que el constructor debe tener el mismo nombre que el nombre de la clase. Por ejemplo, vea el siguiente código:

    class Parent {
        public Parent()
        {
        }
      
        public void print()
        {
        }
    }
      
    public class Child extends Parent {
        public Parent()
        {
        }
        public void print()
        {
        }
      
        public static void main(String[] args)
        {
            Child c1 = new Child(); // allowed
            Child c2 = new Parent(); // not allowed
        }
    }

    Si definimos el constructor de la clase principal dentro de la clase secundaria, dará un error de tiempo de compilación para el tipo de retorno y lo considerará un método. Pero para el método de impresión, no da ningún error de tiempo de compilación y lo considera un método anulado.

  • Ahora suponga que si los constructores se pueden heredar, será imposible lograr la encapsulación. Porque al usar el constructor de una superclase podemos acceder/inicializar miembros privados de una clase.
  • No se puede llamar a un constructor como método. Se llama cuando se crea el objeto de la clase, por lo que no tiene sentido crear el objeto de la clase secundaria utilizando la notación del constructor de la clase principal. es decir, niño c = nuevo padre();
  • Un constructor de clase principal no se hereda en la clase secundaria y es por eso que super() se agrega automáticamente en el constructor de clase secundaria si no hay una llamada explícita a super o this.

Este artículo es una contribución de Sajid Ali Khan . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *