03-Here - Universidad de Deusto

Report
Igor Santos Grueiro
NO
Hay más relaciones
entre clases
El 96 % del ADN de un
chimpancé es igual al tuyo
Tenemos un
ancestro común
o
“clase padre”
Heredamos rasgos
de nuestros padres
Y en java,
¿cómo se hereda?
public class ClaseHija
extends
ClasePadre
¿qué se hereda?
Se heredan
atributos y métodos
Una clase puede tener
muchas clases hijas
Pero sólo un padre
Esto es en java
La clase hija sólo puede acceder
a atributos y métodos de la clase padre
protected y public
Se usará para
atributos de la clase padre
protected permite el acceso a los
atributos y métodos calificados como
tales desde la propia clase, desde
clases hijas o derivadas o desde
clases del mismo paquete
public class Persona{
protected int dni;
public int getDni(){
return this.dni;
}
public void setDni(int dni){
this.dni = dni;
}
public Persona(int dni){
this.dni = dni;
}
}
public class Empleado extends Persona{
protected int antiguedad;
public Empleado (int dni, int ant){
super(dni);
this.antiguedad = ant;
}
}
Es el constructor de
la clase padre
Todo objeto de una clase hija o derivada
es un
objeto de la clase padre o clase base
Todo Empleado es una Persona, por
ello la siguiente asignación es valida
Persona p;
Empleado e = new Empleado (45829821,2);
p = e;
Sin embargo, no seria correcta la
asignación
Persona p = new Persona(45829821);
Empleado e = p;
Error en tiempo de
compilación
Podríamos hacer un casting…
Persona p = new Persona(45829821);
Empleado e = (Empleado)p;
Pero fallaría en
ejecución
El casting no se puede hacer de una
variable de clase padre a una variable de
clase hija, ni entre variables hijas de
un mismo padre
Pero aún hay
más
Todos somos personas pero
¿hablamos igual?
Nuestro método hablar es
polimórfico
El polimorfismo es la propiedad que implica
que un método se comporte de diferente
forma en función del tipo de clase del
objeto que le llama a su ejecución
Figura
Círculo
Rectángulo
public class Figura{
protected double posX;
protected double posY;
public double area(){
return 0;
}
}
public class Circulo extends Figura {
private double radio;
public double area(){
return 3.14 * radio * radio;
}
}
public class Rectangulo extends Figura {
private double base;
private double altura;
public double area(){
return base * altura;
}
}
El método area de la clase Figura
no estaba bien definido
Un método abstracto es aquel que se declara
en la clase padre o clase base, pero
se implementa en una clase hija o derivada
Toda clase que contenga un método abstracto
se denomina clase abstracta
Una clase hija que no redefine un método
abstracto también es una clase abstracta
public abstract class Figura{
//...
public abstract double area;
}
No se pueden crear objetos
de una clase abstracta
Figura f = new Figura();
Error de compilación
Hay que declarar los constructores
porque son utilizados por sus clases
derivadas
Y, ¿si queremos saber la clase hija
de un objeto de la clase padre?
Figura r = new Rectangulo(3,4);
if (r instanceof Rectangulo){
// Hacer algo
}
Evalúa si r es de tipo
Rectangulo
Y, ¿cuándo no queremos que se
pueda heredar un clase?
public final class Rombo extends Figura{
}
Indica que la clase no
se puede heredar
Podemos hacer lo mismo
con los métodos
Ahora sí podemos crear el universo

similar documents