Ejecución de Constructores Java en Herencia

Mehvish Ashiq 15 febrero 2024
  1. Ejecución de Constructores Java en Herencia
  2. Ejecución del constructor Java predeterminado en herencia
  3. Ejecución del constructor Java en herencia cuando la clase principal tiene un constructor predeterminado y parametrizado
  4. Use super para llamar al constructor parametrizado de la clase principal y todas las clases secundarias
Ejecución de Constructores Java en Herencia

Hoy aprenderemos sobre la ejecución de constructores de Java en herencia. Veremos ejemplos de código de los constructores predeterminados y parametrizados en las clases derivadas (también denominadas clases secundarias y subclases).

Ejecución de Constructores Java en Herencia

Se necesita suficiente conocimiento sobre herencia para continuar con este artículo. Si está leyendo este tutorial, asumimos que tiene una sólida comprensión de la herencia de Java.

Aprendamos sobre el proceso de ejecución de los constructores de Java mientras extendemos la clase principal (también conocida como clase base o superclase) usando la palabra clave extends.

Ejecución del constructor Java predeterminado en herencia

Código de ejemplo:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

Producción :

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

Aquí, tenemos una clase de prueba llamada constructorsInInheritance, que crea el objeto de grandChildClass.

Tenemos otras tres clases llamadas parentClass, childClass, grandChildClass, donde grandChildClass hereda la childClass y childClass amplía la parentClass.

Aquí, el constructor predeterminado parentClass es llamado automáticamente por un constructor childClass. Cada vez que creamos una instancia de la clase secundaria, el constructor de la clase principal se ejecuta automáticamente, seguido del constructor de la clase secundaria.

Observe la salida dada arriba. Si todavía está confundido, vea la siguiente explicación visual.

ejecución de constructores java en herencia - explicación visual

¿Y si creamos un objeto de la childClass en el método main? ¿Cómo se ejecutarán ahora los constructores predeterminados?

Primero se ejecutará el constructor de parentClass, y luego el constructor de childClass producirá el siguiente resultado.

Producción :

Default constructor of the parent class.
Default constructor of the child class.

Ejecución del constructor Java en herencia cuando la clase principal tiene un constructor predeterminado y parametrizado

Código de ejemplo:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

Producción :

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

Aquí, tenemos un constructor parametrizado en parentClass. Sin embargo, los constructores predeterminados todavía se llaman porque invocamos el constructor predeterminado grandChildClass() en el método main, llamando además al constructor predeterminado de la clase principal.

Escribamos también los constructores parametrizados en childClass y grandChildClass. Luego, llame al constructor parametrizado de grandChildClass en la función main.

Observe qué constructores se llaman, si son predeterminados o parametrizados.

Código de ejemplo:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

Producción :

Default constructor of the parent class.
Default constructor of the child class.
Hi Mehvish! It's a parameterized constructor of the grand child class

El código anterior solo llama al constructor parametrizado de grandChildClass. Usamos el super() para llamar al constructor parametrizado de parentClass, childClass y grandChildClass.

Recuerde, la llamada al constructor de la clase principal debe estar en la primera línea del constructor de la clase secundaria.

Use super para llamar al constructor parametrizado de la clase principal y todas las clases secundarias

Código de ejemplo:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    super(name);
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    super(name);
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

Producción :

Hi Mehvish! It's a parameterized constructor of the parent class
Hi Mehvish! It's a parameterized constructor of the child class
Hi Mehvish! It's a parameterized constructor of the grand child class

Usamos la palabra clave super para llamar al constructor de clase padre parametrizado. Se refiere a la clase padre (superclase o clase base).

Lo usamos para acceder al constructor de la clase principal y llamamos a los métodos de la clase principal.

super es muy útil para los métodos con los nombres exactos en las clases padre e hijo.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Java Inheritance