Transcript 03-Here - Universidad de Deusto
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 public int
dni; getDni(){
return this
.dni; }
public void
setDni(
int this
.dni = dni; }
public
Persona(
int this
.dni = dni; } dni){ dni){ }
public class Empleado extends protected int
antiguedad;
public
Empleado (
int Persona
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
p = e; Empleado (45829821,2);
Sin embargo, no seria correcta la asignación Persona p =
new
Empleado e = p
;
Persona(45829821); 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
Círculo Figura Rectángulo
public class Figura
{
protected double
} posX;
protected double public double
posY; area(){
return
0; }
public class Circulo extends Figura
{
private double
radio;
public double
area(){
return
3.14 * radio * radio; } }
public class Rectangulo private double
base;
extends Figura
{
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 if
(r
instanceof
// Hacer algo } Rectangulo(3,4); Rectangulo){ 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