El encadenamiento de constructores en Java es simplemente el acto de un constructor que llama a otro constructor por herencia. Esto sucede implícitamente cuando se construye una subclase: su primera tarea es llamar al método constructor de su padre. Pero los programadores también pueden llamar a otro constructor explícitamente usando las palabras clave esta() o súper(). los esta() la palabra clave llama a otro constructor sobrecargado en la misma clase; el súper() la palabra clave llama a un constructor no predeterminado en una superclase.
El encadenamiento del constructor ocurre mediante el uso de la herencia. La primera tarea de un método de constructor de subclase es llamar al método de constructor de su superclase. Esto asegura que la creación del objeto de subclase comience con la inicialización de las clases por encima de él en la cadena de herencia.
Podría haber cualquier número de clases en una cadena de herencia. Cada método de constructor llama la cadena hasta que se alcanza e inicializa la clase en la parte superior. Luego, cada clase subsiguiente a continuación se inicializa a medida que la cadena retrocede a la subclase original. Este proceso se llama encadenamiento de constructor.
Tenga en cuenta que:
Considere esta superclase Animal extendida por Mamífero:
clase animal
// constructor
Animal()
System.out.println ("Estamos en la clase de constructores de animales");
clase Mamífero extiende Animal
//constructor
Mamífero()
System.out.println ("Estamos en la clase del constructor de Mammal".);
Ahora, instanciamos la clase Mammal:
ChainingConstructors de clase pública
/ **
* @param args
* /
public static void main (String [] args)
Mamífero m = nuevo mamífero ();
Cuando se ejecuta el programa anterior, Java dispara implícitamente una llamada al constructor de la superclase Animal, luego al constructor de la clase. El resultado, por lo tanto, será:
Estamos en la clase de constructores de animales
Estamos en la clase del constructor de Mammal
Uso explícito de la esta() o súper() palabras clave le permite llamar a un constructor no predeterminado.
Tenga en cuenta que la llamada a otro constructor debe ser la primera instrucción en el constructor o Java arrojará un error de compilación.
Considere el siguiente código en el que una nueva subclase, Carnivore, hereda de la clase Mammal que hereda de la clase Animal, y cada clase ahora tiene un constructor que toma un argumento.
Aquí está la superclase Animal:
clase pública animalTenga en cuenta que el constructor ahora toma un nombre de tipo Cuerda como parámetro y que el cuerpo de la clase llama esta() en el constructor. Sin el uso explícito de este nombre, Java crearía un constructor predeterminado sin argumentos e invocaría eso, en su lugar.
nombre de cadena privado;
Public Animal (String name) // constructor con un argumento
this.name = nombre;
System.out.println ("Primero me ejecutan");
Aquí está la subclase Mammal:
clase pública Mammal extiende Animal
Mamífero público (nombre de cadena)
super (nombre);
System.out.println ("Estoy ejecutado segundo");
Su constructor también toma un argumento, y usa super (nombre) para invocar a un constructor específico en su superclase.
Aquí hay otra subclase de Carnívoro. Esto hereda de Mammal:
Carnivore de clase pública extiende Mammal
Carnívoro público (nombre de cadena)
super (nombre);
System.out.println ("Me ejecutaron por última vez");
Cuando se ejecuta, estos tres bloques de código se imprimirían:
Soy ejecutado primero.
Estoy ejecutado segundo.
Soy ejecutado el último.
Recordar: Cuando se crea una instancia de la clase Carnivore, la primera acción de su método constructor es llamar al método constructor Mammal. Del mismo modo, la primera acción del método del constructor Mammal es llamar al método del constructor Animal. Una cadena de llamadas de método de constructor garantiza que la instancia del objeto Carnivore haya inicializado correctamente todas las clases en su cadena de herencia.