viernes, 25 de mayo de 2012

3.5 Constructores y destructores en clases derivadas.

Constructores en clases derivadas 

Al instanciar objetos de clases derivadas se inicia una cadena de invocaciones a constructores en las cuales el constructor de la clase derivada, antes de realizar sus propias tareas, invoca (ya sea implícita o explícitamente) al constructor de su clase base. Similarmente, si la clase base fue derivada de otra clase, el constructor de la clase base debe invocar al constructor de la clase ubicada en el siguiente nivel superior de la jerarquía, y así sucesivamente. El último constructor invocado en la cadena es el constructor de la clase Object, cuyo cuerpo se ejecuta primero. El cuerpo del constructor de la clase derivada se ejecuta al final. El constructor de cada clase base inicializa las variables de instancia que el objeto de la clase derivada hereda. 

Destructores en clases derivadas 

Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura invoca al destructor del objeto. Esto inicia una cadena de invocaciones a destructores, en donde el destructor de la clase derivada y los destructores de las clases bases directas e indirectas se ejecutan en orden inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el destructor de la clase derivada y al final se ejecuta el destructor de la clase base ubicada en el nivel superior de la jerarquía. La ejecución de los destructores debe liberar todos los recursos que el objeto adquirió, antes de que el recolector de basura reclame la memoria de ese objeto. Cuando el recolector de basura invoca al destructor de un objeto de una clase derivada, ese destructor realiza su tarea y después invoca al destructor de la clase base. El proceso se repite hasta que se invoca al destructor de la clase Object.


Ejemplo:

Clase base

package ejemploconstructor;

public class Main {

    public static void main(String[] args) {

 persona Persona=new persona ("ejemplo \n","de\n","constructor");
              Persona.muestraNombre();
    }
}

Clase escuela

package ejemploconstructor;


public class escuela {
   public String nombre;
   public String direccion;
   public String cedula;

//contructor
public escuela(String nombre, String direccion, String cedula){

    this.nombre=nombre;
    this.direccion=direccion;
    this.cedula=cedula;
}

public void muestraNombre(){
    System.out.printf("Nombre es : %s",this.nombre);
     System.out.printf("apellido es : %s",this.direccion);
      System.out.printf("correo es : %s",this.cedula);
      System.out.println();
}
protected void finalize(){
    System.out.print("Datos destruidos");
}
}

Clase persona

package ejemploconstructor;


public class persona {
   private String nombre;
   private String apellido;
   private String correo;
//contructor
public persona(String nombre, String apellidos, String correo){

    this.nombre=nombre;
    this.apellido =apellidos;
    this.correo=correo;
}
public void muestraNombre(){
    System.out.printf("Nombre es : %s",this.nombre);
     System.out.printf("apellido es : %s",this.apellido);
      System.out.printf("correo es : %s",this.correo);
      System.out.println();
}
protected void finalize(){
    System.out.print("Datos destruidos");
}
}

No hay comentarios:

Publicar un comentario