9728_entendiendo_el_..

Anuncio
Entendiendo la sobreescritura (override) y otros líos (en JAVA).
Veamos el siguiente código de ejemplo:
public class Padre {
public int numero;
public Padre(){}
public void Imprimir(){
System.out.println(“ Oli “);
}
}
public class Hijo extends Padre {
public int numero;
public Hijo(){}
@Overrride
public void Imprimir(){
System.out.println( “ Chau “);
}
public void Imprimir_2(){
System.out.println( “ Soy el hijo! “ );
}
}
public class Main(){
public static void main (){
Padre padre = new Padre();
Hijo hijo = new Hijo();
padre.numero = 1;
hijo.numero = 2;
padre.imprimir(); // 1 (imprime “Oli”)
hijo.imprimir(); // 2 (imprime “Chau”)
padre = hijo; // 3 (asignamos la memoria de hijo a padre)
// Perdimos la referencia a la memoria de padre.
padre.imprimir(); // 4 (imprime “Chau”, es decir, aunque padre es de tipo
// Padre, se usa el método del hijo.)
System.out.println( “Numero: “ + padre.numero ); // 5 ( Imprime “Numero: 0”
// porque en el caso de variables con el mismo nombre,
// siempre se llama a la variable según el tipo de la variable que
// contiene la memoria. En JAVA los enteros se inicializan a cero, siendo así
// podemos ver que se llamó a la variable <<numero>> de la super clase
// que fue inicializada por JAVA. )
hijo = new Padre(); // 6 (Error, esto es ilegal, una variable de una subclase NO
// puede contener una memoria de una super clase, no así
// a la inversa, una super clase puede contener la memoria de
// de una subclase (aunque se pierden temporalmente las
// referencias a los métodos y variables exclusivas de la
// subclase), para poder acceder a los métodos exclusivos de
// la subclase se debe hacer un cast. )
padre.imprimir_2(); // 7 ( Error, como se dijo anteriormente, un variable de super
// clase que apunta a una subclase no puede acceder a los
// métodos exclusivos de la subclase, para ello debemos hacer
// un cast explícito.
((Hijo) padre).imprimir_2(); // 8 (Esto imprimirá “Soy el hijo!”);
}
}
Alejandro Porras – 2011.
Descargar