"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Las subclases de Java siempre necesitan llamar explícitamente al constructor de superclases?

¿Las subclases de Java siempre necesitan llamar explícitamente al constructor de superclases?

Publicado el 2024-11-09
Navegar:868

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

¿Debe llamar explícitamente al constructor de superclase en las subclases de Java?

Al definir una subclase, es una práctica común ver constructores que llaman explícitamente a la constructor de superclase usando super(). Sin embargo, uno puede preguntarse si esto es necesario.

¿El compilador agrega automáticamente super()?

Sí, si el constructor de la subclase omite una llamada a la superclase constructor, el compilador llamará automáticamente al constructor sin argumentos accesible (constructor sin argumentos) en la superclase. Este comportamiento predeterminado se conoce como encadenamiento de constructores.

Tipos de constructores

  • Constructor sin argumentos: Un constructor sin parámetros.
  • Constructor sin argumentos accesible: Un constructor sin argumentos en la superclase que es visible para la subclase (público, protegido o paquete privado).
  • Constructor predeterminado: El constructor público sin argumentos agregado por el compilador cuando no hay un constructor explícito en la clase.

Cuando es super( ) ¿Obligatorio?

El uso explícito de super() solo es necesario si:

  • La superclase no tiene un constructor sin argumentos accesible.
  • El El constructor de la subclase incluye parámetros, en cuyo caso debe llamar explícitamente a un constructor en la superclase que acepte esos parámetros.

Ejemplo 1:

public class Base {}
public class Derived extends Base {}

No se necesita una llamada explícita a super() porque Base tiene un constructor predeterminado.

Ejemplo 2:

public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}

En este caso, se requiere super(i) porque la superclase no tiene un constructor sin argumentos y el constructor de la subclase necesita proporcionar un valor inicial para su parámetro i.

Al comprender estos conceptos, puede evitar llamadas super() innecesarias y garantizar un encadenamiento de constructores adecuado en sus subclases.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3