No es lo mismo
ocultar que redefinir.
La subclase puede ocultar
·
variables
(de clase y de objeto)
· métodos estáticos
a base de definir
· variables con el mismo nombre
· métodos con la misma signatura
Se puede acceder a los elementos de la superclase vía upcasting,
creando una variable de la clase que necesitamos
Redefinición (ver Polimorfismo)
La subclase puede redefinir
· métodos de objetos
a base de definir métodos con la misma signatura
· mismo nombre
·
mismo
número y tipo de argumentos
· igual o menos excepciones
·
igual
o más visible
“de paquete” < protected < public
· igual resultado
Sólo hay una forma de acceder al método de la superclase:
super.metodo(argumentos)
y sólo puede accederse a los métodos de la superclase inmediatamente
superior a donde nos encontramos.
Intentaremos mostrar
mediante un ejemplo la sutil diferencia entre ocultar y redefinir.
class
Madre |
public
class Madre { public static String getClase() {
return "clase Madre"; } public String getObjeto() { return "objeto de clase Madre"; } } |
class
Hija |
public
class Hija extends Madre { // oculta public static String getClase() {
return "clase Hija"; } @Override public String getObjeto() { return "objeto de clase Hija"; } } |
class
Madres_Hijas |
public
class Madres_Hijas { public static void main(String[]
argumentos) { Madre madre = new Madre();
System.out.println("madre.getClase() -> " + madre.getClase());
System.out.println("madre.getObjeto() -> " + madre.getObjeto()); Hija hija = new Hija();
System.out.println("hija.getClase() -> " + hija.getClase());
System.out.println("hija.getObjeto() -> " + hija.getObjeto()); Madre confusa = new Hija(); // upcasting
System.out.println("confusa.getClase() -> " + confusa.getClase());
System.out.println("confusa.getObjeto() -> " + confusa.getObjeto()); } } |
ejecución |
$ java Madres_Hijas madre.getClase() -> clase Madre madre.getObjeto() -> objeto de clase Madre hija.getClase() -> clase Hija hija.getObjeto() -> objeto de clase Hija confusa.getClase() -> clase
Madre confusa.getObjeto()
-> objeto de clase Hija |
Nótese que java
usa una variable, confusa, definida como Madre, pero
referenciando un objeto de clase Hija. El upcasting resuelve diferentemente
el caso de los métodos ocultos y el de los redefinidos.
Temas relacionados
87. Herencia [inheritance] (concepto)