SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
1
Tema 7 - Herencia
Luis Gonzaga Pérez Cordón
Índice
Definición
Ventajas
Situaciones en las que se aplica la herencia
Tipos de Herencia
Herencia en Java
Definición
La herencia es un mecanismo de la P.D.O.
que permite construir una clase incorporando
de manera implícita todas las características
de una clase previamente existente.
Ejemplo
A
B
A es un ascendiente o superclase de B. Si la
herencia entre A y B es directa decimos que A es
la clase padre de B
B es un descendiente o subclase de A. Si la
herencia entre A y B es directa decimos además
que B es una clase hija de A
2
Ventajas
Modelado de la realidad: las relaciones de
especialización/generalización entre las
entidades del mundo real.
Evita redundancias
Facilita la reutilización
Sirve de soporte para el polimorfismo
Situaciones en las que se aplica la
herencia
Situaciones:
Especialización
Extensión
Especificación
Construcción ?????
Situaciones en las que se aplica la
herencia
Especialización: Dado un concepto B y otro
concepto A que representa una
especialización de B, entonces puede
establecerse una relación de herencia entre las
clases de objetos que representan a A y B.
Vehículo
Coche
A es un B: un Coche es un Vehículo
Situaciones en las que se aplica la
herencia
Extensión: una clase puede servir para
extender la funcionalidad de una superclase
sin que represente necesariamente un
concepto más específico.
Vendedor
VendedorConVehículo
3
Situaciones en las que se aplica la
herencia
Especificación: Una superclase puede servir
para especificar la funcionalidad mínima
común de un conjunto de descendientes.
ObjetoGrafico:
seleccionar
mover
escalar
cambiarColor
Texto Línea Cuadrado
Situaciones en las que se aplica la
herencia
Construcción: Una clase puede construirse a
partir de otra, simplemente porque la hija
puede aprovechar internamente parte o toda la
funcionalidad del padre, aunque representen
entidades sin conexión alguna.
Lista
Pila
Situaciones en las que se aplica la
herencia
Construcción: ¡¡MAL USO DE LA
HERENCIA!!. No se debe emplear en estos
casos. Si necesita la funcionalidad de una lista
debe USAR una lista, no HEREDAR de una
lista.
Situaciones en las que se aplica la
herencia
Ejemplo:
Cuenta
------------------
long numero;
String titular;
double saldo;
double interes;
----------------
ingreso()
ingresoInteresMes();
leerSaldo();
transferirA();
CuentaCorriente
-----------------
Reintegro();
CuentaAhorroPFijo
--------------------
Date vencimiento;
--------------------
ingresoMes();
PlanPensiones
----------------
Date vencimiento;
float cotización;
String numCuentaOrigen;
4
Tipos de Herencia
Principalmente existen dos tipos de herencia.
Herencia simple: una clase solo puede tener un
padre, por lo tanto la estructura de clases será en
forma de arbol.
Herencia múltiple: Una clase puede tener uno o
varios padres. La estructura de clases es un grafo
Tipos de Herencia
Herencia simple:
Muy fácil de entender y manejar tanto por el
lenguaje como por el programador.
Limitada puesto que en el mundo real un objeto
puede pertenecer a varias clases y sin embargo
aquí esta situación no se puede modelar
Tipos de Herencia
Herencia múltiple:
Es mas realista y da al programador más libertad
y mas posibilidades de reutilización de código.
Es mucho más difícil de utilizar por la posibilidad
de ciclos y para los lenguajes de programación es
muy costoso el permitirlo.
Tipos de Herencia
Ejemplo de herencia múltiple
ElAire
MedioComunicacion
Teléfono
ObjetoFísico
5
Tipos de Herencia
Ejemplo herencia múltiple:
Constructor
----------------------------
Colegio colegio;
Arquitecto
--------------------
construir()
Aparejador
--------------------
construir()
ArquitectoYAparejador
----------------
Colegio colegio; ?????
construir()??????
Herencia en Java
Características
Como se utiliza
Redefinición de métodos, constructores,…
Como funciona la gestión de tipos en java
Métodos y clases abstractas
Interfaces
Ejemplos de herencia
Herencia en Java
Características
Herencia simple
Estructura jerárquica en árbol en donde en la raiz
podemos encontrar la clase Object, de las que
heredan todas las clases.
Todas las clases tienen un padre
Todos los objetos son “Object”
Java no permite que una subclase elimine un
método o una variable de instancia aunque esta no
la necesite
Herencia en Java
Como se utiliza:
6
Herencia en Java Herencia en Java
Herencia en Java
Redefinición de métodos,constructores,
…
¿Qué pasa si en la superclase hay un método
que funciona distinto a como nos gustaría que
funcionara en la subclase?
¿Son las subclases responsables de inicializar
en sus constructores las variables heredadas
de las superclases?
¿Qué pasa si un método de la superclase no
debiera aparecer en la subclase?
7
Redefinición de métodos
Redefinición de métodos
Redefinición de métodos
Redefinición de métodos Constructores
Las subclases NO son responsables de
inicializar las variables de instancia de las
variables que hereda
Para pasarle la responsabilidad de inicializar
esas variables a las superclases puede llamar
al constructor de estas mediante la sentencia
super()
Hay una especia de “herencia” de
constructores
8
Constructores Eliminación de métodos
Java no lo permite
Solución: redefinir el método en las subclases
para que se genero un error en caso de que se
llame a un método no permitido
Tipos Métodos y clases abstractas
Un método se dice que es abstracto si lo
declaramos pero no lo implementamos.
Utilidad:
podemos llamar a métodos que aún no hemos
implementado o que se tienen que implementar
en la subclases.
Podemos declarar métodos que tendrán todas las
subclases pero que no se pueden implementar en
la superclase
Útil en polimorfismo
9
Métodos y clases abstractas
¿Qué pasa si tenemos tres clases que
comparten un mismo mensaje pero que su
implementación es distinta en las tres?
Métodos y clases abstractas
Métodos y clases abstractas
Si creamos una superclase vehículo:
¿Qué hacemos con el método moverse?
¿Debe estar en la superclase? ¿es un método que
tendrán todas subclases de vehículo?
¿Qué implementación tendrá en la superclase?
¿Me aporta alguna ventaja?
Métodos y clases abstractas
10
Métodos y clases abstractas
Moverse en la superclase será un método
abstracto:
Ventajas:
Las subclases tarde o temprano tienen que
implementarlo.
En la superclases en donde este definido puede ser
utilizado aunque no este implementado.
Métodos y clases abstractas
Una clase abstracta es una clase en la que al
menos tiene un método que es abstracto.
Este(os) método(s) abstracto(s) puede que lo haya
definido el o que los haya heredado.
Un clase abstracta NO puede instanciar objetos
¿Qué pasaría si se llamara a un método abstracto?
¿y si se llamara a un método no abstracto pero que
usa un método abstracto?
Para que una clase se declare como abstracta
tenemos que usar la palabra clave abstract
11
Métodos y clases abstractas
IMPORTANTE: Para que un clase que hereda
de una superclase abstracta pueda instanciar
objetos debe de implementar todos los
métodos abstractos que ha heredado, porque
si no lo hiciera, también sería una clase
abstracta.
Interfaces
Definición informal:
Es una clase abstracta sin variables de instancia
en donde todos sus métodos son abstractos
Definición formal:
Es un contrato que establece una clase en el cual
esta clase asegura que implementará un conjunto
de métodos
Interfaces Interfaces
Para que una clase use un interfaz debe
implementar todos sus métodos e indicar que
está usando un interfaz.
12
Interfaces
Utilidad de los interfaces: “simular” herencia
múltiple.
Nota: los interfaces solo tienen sentido en
lenguajes de programación que solo permiten
usar la herencia simple
Ejercicio
Diseñar un ecosistema donde podemos encontrar
varios tipos de animales (gatos, perros, leones,
ratones,…). Algunos de estos animales son
depredadores (comen para obtener “energía”) y
otros presas (son comidos y proporcionan
“energía”), y otros pueden actuar tanto como
depredadores como presas.
Diseñar este ecosistema empleando herencia múltiple
Diseñar este ecosistema empleando herencia sencilla
Ejercicio
Ecosistema con herencia múltiple
13
Ejercicio
Ecosistema con herencia múltiple
Ventajas de esta representación:
Es la más cercana al modelo real
Reutilizamos código de las superclases
Desventajas:
Pocos lenguajes de programación admiten herencia
múltiple (C++)
Es más difícil de implementar (ciclos, variables
distintas de distintitas clases pero con el mismo
nombre,…)
Ejercicio
Ecosistema con herencia sencilla
Ejercicio
Ecosistema con herencia sencilla
Ventajas:
Si lo implementamos bien puede simular el mismo
modelo
Desventajas:
Las clases dejan de representar lo que deberían de
representar
Las subclases deben anular métodos porque si no se hace
podrían hacer cosas raras (un ratón podría comerse un
perro) -> ¿Qué pasa si tengo herencia múltiple con
muchas clases? problemas con los olvidos
Ejercicio
Ecosistema con herencia sencilla y interfaces
14
Ejercicio
Ecosistema con herencia sencilla y interfaces
Ventajas:
El modelo refleja bastante fielmente la situación real
Las clases implementadas son conceptualmente
correctas
Desventajas:
Se deben implementar los interfaces. No hay
reutilización de código.
Ejercicio
Ecosistema con herencia sencilla y interfaces
(segundo enfoque):
Ecosistema con herencia sencilla y interfaces
(segundo enfoque):
Ventajas
El modelo refleja bastante fielmente la situación real
No hay que implementar los interfaces
Desventajas
Las clases implementadas no son del todo
conceptualmente correctas pero evitamos un mal uso

Más contenido relacionado

La actualidad más candente

Que es una clase en java
Que es una clase en javaQue es una clase en java
Que es una clase en javaAndres Vasquez
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnetjhordy2000
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herenciajlmanmons
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc X
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosUVMVirtual
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc X
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosMario Villaseñor
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguezcoruniversitec
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadasGaloGabriel
 
Explicacion de interface
Explicacion de interfaceExplicacion de interface
Explicacion de interfaceBoris Salleg
 

La actualidad más candente (20)

Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Que es una clase en java
Que es una clase en javaQue es una clase en java
Que es una clase en java
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Greenfoot 1
Greenfoot 1Greenfoot 1
Greenfoot 1
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salida
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a Objetos
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguez
 
Historia java ruben
Historia java rubenHistoria java ruben
Historia java ruben
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Explicacion de interface
Explicacion de interfaceExplicacion de interface
Explicacion de interface
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Greenfoot 3
Greenfoot 3Greenfoot 3
Greenfoot 3
 
Clasesyobjetos
ClasesyobjetosClasesyobjetos
Clasesyobjetos
 
Tema4 herencia
Tema4 herenciaTema4 herencia
Tema4 herencia
 
Introducción a scala
Introducción a scalaIntroducción a scala
Introducción a scala
 

Destacado

Programacion web aprenda java como si estuviera en primero
Programacion web   aprenda java como si estuviera en primeroProgramacion web   aprenda java como si estuviera en primero
Programacion web aprenda java como si estuviera en primeroJuan Mancilla
 
bfarm-v2
bfarm-v2bfarm-v2
bfarm-v2Zeus G
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
20 Ideas for your Website Homepage Content
20 Ideas for your Website Homepage Content20 Ideas for your Website Homepage Content
20 Ideas for your Website Homepage ContentBarry Feldman
 

Destacado (6)

Programacion web aprenda java como si estuviera en primero
Programacion web   aprenda java como si estuviera en primeroProgramacion web   aprenda java como si estuviera en primero
Programacion web aprenda java como si estuviera en primero
 
Barrelfish OS
Barrelfish OS Barrelfish OS
Barrelfish OS
 
bfarm-v2
bfarm-v2bfarm-v2
bfarm-v2
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Android
AndroidAndroid
Android
 
20 Ideas for your Website Homepage Content
20 Ideas for your Website Homepage Content20 Ideas for your Website Homepage Content
20 Ideas for your Website Homepage Content
 

Similar a Herencia Java

METODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxMETODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxjuan gonzalez
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad iiIrving Trigo
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad iiIrving Trigo
 
Java_Capitulo_7
Java_Capitulo_7Java_Capitulo_7
Java_Capitulo_7Espol
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++joel1386
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Javamaeusogo
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfJCarlosCrespo
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IEKaren Olan
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E InterfacesEmilio Aviles Avila
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos Marielena Lujano
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismonestor_moren
 
Cuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCarlos Anibal Riascos Hurtado
 
Conceptos POO PV
Conceptos POO PVConceptos POO PV
Conceptos POO PVDavid Clara
 

Similar a Herencia Java (20)

03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Guía Herencia PO_O
Guía Herencia PO_OGuía Herencia PO_O
Guía Herencia PO_O
 
Leccion 9 Java
Leccion 9 JavaLeccion 9 Java
Leccion 9 Java
 
METODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxMETODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptx
 
JAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIAJAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIA
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Java_Capitulo_7
Java_Capitulo_7Java_Capitulo_7
Java_Capitulo_7
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++
 
08 Herencia
08   Herencia08   Herencia
08 Herencia
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdf
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IE
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos
 
10.herencia en c++
10.herencia en c++10.herencia en c++
10.herencia en c++
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
Cuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibal
 
Conceptos POO PV
Conceptos POO PVConceptos POO PV
Conceptos POO PV
 

Herencia Java

  • 1. 1 Tema 7 - Herencia Luis Gonzaga Pérez Cordón Índice Definición Ventajas Situaciones en las que se aplica la herencia Tipos de Herencia Herencia en Java Definición La herencia es un mecanismo de la P.D.O. que permite construir una clase incorporando de manera implícita todas las características de una clase previamente existente. Ejemplo A B A es un ascendiente o superclase de B. Si la herencia entre A y B es directa decimos que A es la clase padre de B B es un descendiente o subclase de A. Si la herencia entre A y B es directa decimos además que B es una clase hija de A
  • 2. 2 Ventajas Modelado de la realidad: las relaciones de especialización/generalización entre las entidades del mundo real. Evita redundancias Facilita la reutilización Sirve de soporte para el polimorfismo Situaciones en las que se aplica la herencia Situaciones: Especialización Extensión Especificación Construcción ????? Situaciones en las que se aplica la herencia Especialización: Dado un concepto B y otro concepto A que representa una especialización de B, entonces puede establecerse una relación de herencia entre las clases de objetos que representan a A y B. Vehículo Coche A es un B: un Coche es un Vehículo Situaciones en las que se aplica la herencia Extensión: una clase puede servir para extender la funcionalidad de una superclase sin que represente necesariamente un concepto más específico. Vendedor VendedorConVehículo
  • 3. 3 Situaciones en las que se aplica la herencia Especificación: Una superclase puede servir para especificar la funcionalidad mínima común de un conjunto de descendientes. ObjetoGrafico: seleccionar mover escalar cambiarColor Texto Línea Cuadrado Situaciones en las que se aplica la herencia Construcción: Una clase puede construirse a partir de otra, simplemente porque la hija puede aprovechar internamente parte o toda la funcionalidad del padre, aunque representen entidades sin conexión alguna. Lista Pila Situaciones en las que se aplica la herencia Construcción: ¡¡MAL USO DE LA HERENCIA!!. No se debe emplear en estos casos. Si necesita la funcionalidad de una lista debe USAR una lista, no HEREDAR de una lista. Situaciones en las que se aplica la herencia Ejemplo: Cuenta ------------------ long numero; String titular; double saldo; double interes; ---------------- ingreso() ingresoInteresMes(); leerSaldo(); transferirA(); CuentaCorriente ----------------- Reintegro(); CuentaAhorroPFijo -------------------- Date vencimiento; -------------------- ingresoMes(); PlanPensiones ---------------- Date vencimiento; float cotización; String numCuentaOrigen;
  • 4. 4 Tipos de Herencia Principalmente existen dos tipos de herencia. Herencia simple: una clase solo puede tener un padre, por lo tanto la estructura de clases será en forma de arbol. Herencia múltiple: Una clase puede tener uno o varios padres. La estructura de clases es un grafo Tipos de Herencia Herencia simple: Muy fácil de entender y manejar tanto por el lenguaje como por el programador. Limitada puesto que en el mundo real un objeto puede pertenecer a varias clases y sin embargo aquí esta situación no se puede modelar Tipos de Herencia Herencia múltiple: Es mas realista y da al programador más libertad y mas posibilidades de reutilización de código. Es mucho más difícil de utilizar por la posibilidad de ciclos y para los lenguajes de programación es muy costoso el permitirlo. Tipos de Herencia Ejemplo de herencia múltiple ElAire MedioComunicacion Teléfono ObjetoFísico
  • 5. 5 Tipos de Herencia Ejemplo herencia múltiple: Constructor ---------------------------- Colegio colegio; Arquitecto -------------------- construir() Aparejador -------------------- construir() ArquitectoYAparejador ---------------- Colegio colegio; ????? construir()?????? Herencia en Java Características Como se utiliza Redefinición de métodos, constructores,… Como funciona la gestión de tipos en java Métodos y clases abstractas Interfaces Ejemplos de herencia Herencia en Java Características Herencia simple Estructura jerárquica en árbol en donde en la raiz podemos encontrar la clase Object, de las que heredan todas las clases. Todas las clases tienen un padre Todos los objetos son “Object” Java no permite que una subclase elimine un método o una variable de instancia aunque esta no la necesite Herencia en Java Como se utiliza:
  • 6. 6 Herencia en Java Herencia en Java Herencia en Java Redefinición de métodos,constructores, … ¿Qué pasa si en la superclase hay un método que funciona distinto a como nos gustaría que funcionara en la subclase? ¿Son las subclases responsables de inicializar en sus constructores las variables heredadas de las superclases? ¿Qué pasa si un método de la superclase no debiera aparecer en la subclase?
  • 7. 7 Redefinición de métodos Redefinición de métodos Redefinición de métodos Redefinición de métodos Constructores Las subclases NO son responsables de inicializar las variables de instancia de las variables que hereda Para pasarle la responsabilidad de inicializar esas variables a las superclases puede llamar al constructor de estas mediante la sentencia super() Hay una especia de “herencia” de constructores
  • 8. 8 Constructores Eliminación de métodos Java no lo permite Solución: redefinir el método en las subclases para que se genero un error en caso de que se llame a un método no permitido Tipos Métodos y clases abstractas Un método se dice que es abstracto si lo declaramos pero no lo implementamos. Utilidad: podemos llamar a métodos que aún no hemos implementado o que se tienen que implementar en la subclases. Podemos declarar métodos que tendrán todas las subclases pero que no se pueden implementar en la superclase Útil en polimorfismo
  • 9. 9 Métodos y clases abstractas ¿Qué pasa si tenemos tres clases que comparten un mismo mensaje pero que su implementación es distinta en las tres? Métodos y clases abstractas Métodos y clases abstractas Si creamos una superclase vehículo: ¿Qué hacemos con el método moverse? ¿Debe estar en la superclase? ¿es un método que tendrán todas subclases de vehículo? ¿Qué implementación tendrá en la superclase? ¿Me aporta alguna ventaja? Métodos y clases abstractas
  • 10. 10 Métodos y clases abstractas Moverse en la superclase será un método abstracto: Ventajas: Las subclases tarde o temprano tienen que implementarlo. En la superclases en donde este definido puede ser utilizado aunque no este implementado. Métodos y clases abstractas Una clase abstracta es una clase en la que al menos tiene un método que es abstracto. Este(os) método(s) abstracto(s) puede que lo haya definido el o que los haya heredado. Un clase abstracta NO puede instanciar objetos ¿Qué pasaría si se llamara a un método abstracto? ¿y si se llamara a un método no abstracto pero que usa un método abstracto? Para que una clase se declare como abstracta tenemos que usar la palabra clave abstract
  • 11. 11 Métodos y clases abstractas IMPORTANTE: Para que un clase que hereda de una superclase abstracta pueda instanciar objetos debe de implementar todos los métodos abstractos que ha heredado, porque si no lo hiciera, también sería una clase abstracta. Interfaces Definición informal: Es una clase abstracta sin variables de instancia en donde todos sus métodos son abstractos Definición formal: Es un contrato que establece una clase en el cual esta clase asegura que implementará un conjunto de métodos Interfaces Interfaces Para que una clase use un interfaz debe implementar todos sus métodos e indicar que está usando un interfaz.
  • 12. 12 Interfaces Utilidad de los interfaces: “simular” herencia múltiple. Nota: los interfaces solo tienen sentido en lenguajes de programación que solo permiten usar la herencia simple Ejercicio Diseñar un ecosistema donde podemos encontrar varios tipos de animales (gatos, perros, leones, ratones,…). Algunos de estos animales son depredadores (comen para obtener “energía”) y otros presas (son comidos y proporcionan “energía”), y otros pueden actuar tanto como depredadores como presas. Diseñar este ecosistema empleando herencia múltiple Diseñar este ecosistema empleando herencia sencilla Ejercicio Ecosistema con herencia múltiple
  • 13. 13 Ejercicio Ecosistema con herencia múltiple Ventajas de esta representación: Es la más cercana al modelo real Reutilizamos código de las superclases Desventajas: Pocos lenguajes de programación admiten herencia múltiple (C++) Es más difícil de implementar (ciclos, variables distintas de distintitas clases pero con el mismo nombre,…) Ejercicio Ecosistema con herencia sencilla Ejercicio Ecosistema con herencia sencilla Ventajas: Si lo implementamos bien puede simular el mismo modelo Desventajas: Las clases dejan de representar lo que deberían de representar Las subclases deben anular métodos porque si no se hace podrían hacer cosas raras (un ratón podría comerse un perro) -> ¿Qué pasa si tengo herencia múltiple con muchas clases? problemas con los olvidos Ejercicio Ecosistema con herencia sencilla y interfaces
  • 14. 14 Ejercicio Ecosistema con herencia sencilla y interfaces Ventajas: El modelo refleja bastante fielmente la situación real Las clases implementadas son conceptualmente correctas Desventajas: Se deben implementar los interfaces. No hay reutilización de código. Ejercicio Ecosistema con herencia sencilla y interfaces (segundo enfoque): Ecosistema con herencia sencilla y interfaces (segundo enfoque): Ventajas El modelo refleja bastante fielmente la situación real No hay que implementar los interfaces Desventajas Las clases implementadas no son del todo conceptualmente correctas pero evitamos un mal uso