03-Here - Universidad de Deusto

Download Report

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