Tema 5 - Herenciaocw.uc3m.es/.../transparencias/tema5.pdf · 1 Herencia TEMA 5 Manuel Pereira...
Transcript of Tema 5 - Herenciaocw.uc3m.es/.../transparencias/tema5.pdf · 1 Herencia TEMA 5 Manuel Pereira...
1
Herencia
TEMA 5
Manuel Pereira GonzálezV1.3
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
2
Introducción
HerenciaUna clase (subclase ó clase hija) hereda la estructura de otra (superclase o clase padre), y concretiza ciertos aspectos de ésta.La clase hija comprende un subconjunto de los objetos de la clase padre.Ej:
Clase: AnimalSer vivo que nace, crece, se reproduce y muere
Subclase: Perro (subconjunto de animales)Ser vivo que nace, crece, se reproduce, muere, tiene cuatro patas, dos ojos, ladra, …
Introducción
Relación de Generalización / EspecializaciónJerarquía definida a través de la Herencia:
Un CANICHE es un PERRO Una PERRO es un ANIMALUn ANIMAL es un SER VIVO
SER VIVO
ANIMAL VEGETAL
PERROELEFANTE JIRAFA
CANICHE PEQUINÉS …
…
3
Introducción
Ventaja fundamental: Reutilización/Centralización de Código. No es necesario volver a escribir los atributos y métodos de la clase padre en la clase hija.
No duplicidad del códigoDisminuye volumen de códigoFacilita el mantenimientoPermite el polimorfismo: Tratar con objetos de una clase general sin saber la subclase concreta a la que pertenecen
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
4
Clases Derivadas: Implementación
En java para que una clase herede de otra se utiliza la palabra clave extends
Clases Derivadas: Implementación
Una clase derivada hereda las variables y métodos de la clase padre, además de añadir sus variables y métodos propios
5
Clases Derivadas: Constructores
Por defecto desde un constructor de una clase hija se llama al constructor sin argumentos de la clase padre
Clases Derivadas: Constructores
Por defecto desde un constructor de una clase hija se llama al constructor sin argumentos de la clase padreSi se desea llamar a otro constructor de la clase padre se utiliza la palabra clave superPara mantener el encapsulamiento, una clase derivada debe inicializar sus variables específicas en el constructor, y dejar al constructor del padre inicializar las suyas.
6
Clases Derivadas: Constructores
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
7
Sobreescritura de métodos: Métodosheredados vs Sobreescritos
Una clase hija puede sobreescribir un método de la clase padre para modificar su implementación
Sobreescritura de Métodos: Métodos static y final
No se pueden sobreescribir los métodos de clase (static).Si se declara un método de tipo final, no puede ser sobreescrito por clases derivadas
8
Sobreescritura de Métodos: Polimorfismo
PolimorfismoTratar objeto de una clase más general independientemente de que sea de una clase concretaEj: Si tengo un perro, un elefante y una jirafa, puedo tratarlos a todos como animalesEj: Polígono -> Método para calcular el perímetro
Círculo: 2 * PI * RRectángulo: Base * AlturaTriángulo: Base * Altura / 2
Lista de polígonos, cada uno sabe calcular su área pero se tratan de igual manera sin saber de qué tipo de polígono concreto se trata
Sobreescritura de Métodos: Polimorfismo
9
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
Métodos y Clases Abstractas
Un método abstracto (abstract) de una superclase no tiene implementación, debe ser implementado por las clases derivadasPara poder definir un método abstracto, es necesario que la clase sea declarada abstractaUna clase abstracta puede tener métodos abstractos y métodos que no lo sonNo se puede instanciar una clase abstracta (no se pueden crear objetos de esa clase)
10
Métodos y Clases Abstractas
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
11
Restricciones de Acceso
Cuatro posibles visibilidades de atributos y métodos: public, private, protected y package (por defecto, no se pone nada).
NONOSISISubclase en otro paquete
NOSISISISubclase en paquete
NONONOSIOtro paquete
NOSISISIMismo paquete
SISISISIPropia clase
privatenadaprotectedpublicVISIBILIDAD
Restricciones de Acceso
12
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
La Clase Object
En Java, todo objeto implícitamente hereda de la clase ObjectLa clase Object tiene ciertos métodos, que las subclases pueden sobreescribir
public String toString()public int hashCode()public boolean equals(Object obj)protected Object clone()
Todo objeto, por tanto, tiene una implementación por defecto de estos métodos
13
Agenda
IntroducciónClases Derivadas
ImplementaciónConstructores
Sobreescritura de MétodosMétodos Heredados vs SobreescritosMétodos static y finalPolimorfismo
Métodos y clases abstractasRestricciones de AccesoLa Clase ObjectResumen
Resumen
IntroducciónSuperclases y SubclasesReutilización / Centralización de código
Clases DerivadasImplementación (extends)Constructores
Sobreescritura de MétodosMétodos Heredados vsSobreescritosMétodos static y final
No se pueden sobreescribirPolimorfismo
Métodos y clases abstractasMétodo abstract: Sin implementación por defSólo métodos abstract en clases abstractClases abstract no instanciables
Restricciones de Accesopublic, protected, nada y private
La clase ObjectMétodo toString()
14
Resumen: Para más información
http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_6.htmhttp://eees.ii.uam.es/alfonso/web_poo_04/teoria/material/subclases_e_interfaces.pdfhttp://www.ii.uam.es/%7Ecastells/docencia/poo/4-jerarquias.pdf