Professional Documents
Culture Documents
GENERALIZACION / ESPECIALIZACION
Persona
Es-Un
Es-Un Es-Un
Una clase puede redefinir (volver a definir) cualquiera de los métodos heredados
de su super-clase que no sean final. El nuevo método sustituye al heredado para
todos los efectos en la clase que lo ha redefinido.
Se podrá sobreescribir un método en una clase Hija siempre y cuando
en la clase Padre el acceso de visibilidad sea el adecuado. Si por
ejemplo en la clase Padre se tiene un método privado será imposible
que el hijo pueda tener acceso al método y por lo tanto
sobreescribirlo. Por lo tanto las reglas de visibilidad son importantes
En la redefinición, se puede ampliar el nivel de acceso, haciéndolo más
público pero nunca más privado. (De menos a más).
Clase Padre Clase Hija
public public
protected public, protected
private no se puede sobreescribir
default protected, public, default
Ejemplo de sobreescritura en Herencia:
Triangulo Rectangulo
Triangulo( ) ; Rectangulo( ) ;
Triangulo(double ancho, double alto); Rectangulo(double ancho, double alto);
Triangulo(double x); Rectangulo(double x);
double area( ); double area( );
// CODIGO DE LA SUPERCLASE FIGURA
public class Figura{
public Figura( ){
ancho=alto=0.0;
nombre="null";
}
public Figura(double ancho,double alto,String nombre){
this.ancho=ancho;
this.alto=alto;
this.nombre=nombre;
}
public Figura(double x,String nombre){
ancho=alto=x;
this.nombre=nombre;
}
public double getAncho( ){
return ancho;
}
public double getAlto( ){
return alto;
}
public String getNombre( ){
return nombre;
}
public double area( ){
System.out.println("Area ( ) debe ser sobreescrita ");
return 0.0;
}
}
//CODIGO DE LA SUBCLASE TRIANGULO //CODIGO DE LA SUBCLASE RECTANGULO
public class Triangulo extends Figura{ public class Rectangulo extends Figura{
public Triangulo(double ancho, double alto){ public Rectangulo(double ancho, double alto){
super(ancho,alto," Triángulo "); super(ancho,alto," Rectangulo ");
} }
public Triangulo(double x){
super(x,"Triángulo"); public Rectangulo(double x){
} super(x,"Rectángulo");
}
//constructor uno
public ClaseHijo(){
this("Constructor Hijo dos Con parametro");
System.out.println("Constructor Hijo por defecto");
}
//bloque estatico
static {
System.out.println("Ejecucion bloque estatico del Hijo");
}