Tema 11 Herencia
Tema 11 Herencia
Tema 11 Herencia
Curso 2018/2019
1. Introducción
Finalidad
Superclase y subclase
Especialización && Generalización
Superclase directa e indirecta
Tipo de relación
2 Superclases y subclases
6 La clase Object
1-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
1. Introducción
Finalidad
2-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Superclase y subclase
Al crear una clase, en vez de declarar miembros (atributos y métodos) completamente nuevos, el
programador puede designar que la nueva clase herede los miembros de una clase existente.
La clase existente se conoce como superclase, y la nueva clase se conoce como subclase.
Aaa SUPERCLASE
clase de la que se hereda
SUBCLASE
clase que hereda Bbb
… …
} }
3-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Sintaxis:
Ejemplo:
4-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Otro ejemplo:
5-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Una subclase generalmente agrega sus propios atributos y métodos, además de los atributos
y/o métodos heredados.
Las clases se disponen en una jerarquía (jerarquía de clases), donde una clase hereda los
atributos y operaciones de las clases superiores en la jerarquía.
6-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
En Java, la jerarquía de clases empieza con la clase Object (en el paquete java.lang), a partir
de la cual se extienden (o “heredan”) todas las clases en Java, ya sea en forma directa o
indirecta.
7-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Tipo de relación: es un
Aunque en la POO existen diversos tipos de herencia, para simplificar diremos que cuando una clase
hereda de otra, lo que está expresando es una relación "es un".
Por ejemplo si la clase Perro hereda de la clase Mamifero significará que Perro es un Mamifero, es
decir, todo lo que haga un Mamifero lo podrá hacer también Perro.
La clase Oveja y Tigre hereda también de la clase Mamifero, un objeto del tipo Oveja, Tigre o Perro
tiene atributos y métodos comunes que hereda de la clase Mamifero.
Cualquier objeto instanciado de la clase Perro, Tigre u Oveja “es un” objeto de la clase Mamifero.
Es necesario hacer una diferencia entre la relación “es un” y la relación “tiene un”.
vehiculo
automovil
automóvil es un vehículo
8-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
automovil volante
9-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
2 Superclases y subclases
MiembroIES
Docente Administrativo
Administrador Profesor
Cada flecha (línea) representa una relación “es un”. Por ejemplo, al seguir las flechas en esta
jerarquía de clases podemos decir “un Empleado es un MiembroIES” y “un Profesor es un
miembro Docente”.
Si comienza desde la parte inferior del diagrama, podrá seguir las flechas y aplicar la relación
es-un hasta la superclase superior. Por ejemplo, un Administrador es un miembro Docente,
es un Empleado y es un MiembroIES.
10-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Ejemplos
Un Docente es un Empleado.
Docente d1, d2 ;
Administrador a = new Administrador();
Profesor pro = new Profesor();
d1 = a;
d2 = pro;
o también directamente
Un Profesor es un MiembroIES
11-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
2- Los objetos de una superclase no pueden tratarse como objetos de sus subclases.
Depende de la instancia de e
e=d;
En conclusión
Cada objeto de una subclase es también un objeto de la superclase. Sin embargo,
el objeto de una superclase no es un objeto de las subclases.
12-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
A pesar de que una subclase puede utilizar un método de superclase (por herencia), a
menudo esa subclase requiere una versión personalizada del método. En dichos casos, la
subclase puede sobrescribir (redefinir) el método de la superclase con una
implementación más apropiada.
En el tema anterior vimos como todas las clases heredan los métodos toString() y equals(), y
como se implementaron (sobrescribieron) dicho métodos.
La palabra reservada super es una referencia al objeto actual pero apuntando al padre, se
utiliza para acceder desde un objeto a atributos y métodos (incluyendo constructores) del
padre.
Tenemos que tener en cuenta, de forma general, que al ejecutar un método, se busca
su implementación de abajo hacia arriba en la jerarquía de clases.
13-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
14-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Como ya se ha dicho, por herencia un Lobo es un Animal, un objeto de tipo Lobo se pude
tratar como un objeto de tipo Animal.
15-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Hasta ahora habíamos dicho que una clase no tiene acceso a los atributos de otra clase de
acuerdo con el principio de ocultación de la información, por lo tanto una subclase no
debería tener acceso a los campos de una superclase de acuerdo a este principio . Sin
embargo, esto podría considerarse como demasiado restrictivo para una subclase, porque
limita el acceso a una subclase como si se tratara de una clase cualquiera, cuando en
realidad la relación de una superclase con una subclase es más estrecha que con una clase
externa.
En diferentes lenguajes, Java entre ellos, se usa un nivel de acceso intermedio que no es ni
public ni private, sino algo intermedio que se denomina como “acceso protegido”, expresado
con la palabra clave protected, que significa que las subclases sí pueden tener acceso al
atributo o método.
El modificador de acceso protected puede aplicarse a todos los miembros de una clase:
atributos, métodos o constructores.
El modificador de acceso protected puede aplicarse a todos los miembros de una clase, es
decir, tanto a campos como a métodos o constructores. En el caso de métodos o
constructores protegidos, estos serán visibles/utilizables por las subclases y otras clases del
mismo paquete (package). El acceso protegido suele aplicarse a métodos o constructores,
pero preferiblemente no a campos, para evitar debilitar el encapsulamiento.
El delimitador de acceso protected suele usarse cuando se trabaja con herencia. Desde un
objeto de una subclase podremos acceder o invocar un campo o método declarado como
protected, pero no podemos acceder o invocar a campos o métodos privados de una
superclase.
16-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Los atributos o métodos declarados como Public son accesibles tanto desde fuera como
desde dentro de la clase.
Los atributos o métodos declarados como Private son accesibles sólo desde la misma clase
donde fueron definidos.
Ejemplo 0. La clase Interino define dos campos uno con un modificador de acceso protected
y otro private. En el programa test se crea un objeto de la clase y trata de acceder a ese
campo con una invocación directa del tipo interino1.idProfesor = “54-DY-87”.
17-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Java admite una variante más en cuanto a modificadores de acceso: la omisión del mismo
(no declarar ninguno de los modificadores). En la siguiente tabla puedes comparar los efectos
de usar uno u otro tipo de declaración en cuanto a visibilidad de los campos o métodos:
public Sí Sí Sí Sí
protected Sí Sí Sí No
No especificado Sí Sí No No
private Sí No No No
Como recomendación general los atributos deben ser private y los métodos
protected y/o public.
De acuerdo con lo anterior, los métodos de una subclase no pueden tener acceso
directo a los miembros private de su superclase. Una subclase puede modificar el
estado de las variables de instancia private de la superclase sólo a través de los
métodos que no sean private, que se proporcionan en la superclase y son
heredados por la subclase.
18-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Todas las clases en Java (excepto Object) extienden (heredan) de una clase existente.
De hecho, cada clase en Java hereda en forma directa o indirecta los métodos de Object; la
clase Object no tiene atributos.
Si una clase no especifica que hereda de otra clase, la nueva clase hereda de Object en
forma implícita. En general, cuando se define una nueva clase que no hereda de otra no se
suele especificar en su código (de forma, implícita) “extends Object”.
Los ejemplos de esta sección están diseñados cuidadosamente para enseñar las
capacidades y ventajas de la herencia, utilizar miembros protected de la superclase y
cómo sobrescribir los métodos de la superclase para proporcionar versiones más apropiadas.
En definitiva, técnicas de ingeniería de software para crear clases que sean fáciles de
mantener, modificar y depurar, utilizando la herencia como una forma de reutilizar código.
Esta sección se va a ilustrar con ejemplos de una jerarquía de herencia que contiene dos
tipos de empleados (según salario) de una supuesta empresa:
Desarrollamos 5 supuestos (ejemplos) de relación entre los empleados por comisión y los
empleados por comisión con salario base:
19-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
EmpleadoPorComision
EmpleadoBasePorComision2
EmpleadoPorComision2
EmpleadoBasePorComision3
20-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
EmpleadoPorComision3
EmpleadoBaseMasComision4
paquete clases
ejemplo1 EmpleadoPorComision
ejemplo2 EmpleadoBaseMasComision
ejemplo3 EmpleadoPorComision
EmpleadoBaseMasComision2
ejemplo4 EmpleadoBaseMasComision2
EmpleadoBaseMasComision3
Ejemplo5 EmpleadoPorComision2
EmpleadoBaseMasComision4
21-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Clase EmpleadoPorComision.
…...
String primerNombre
String apellidoPaterno
Stirng numeroSeguridadSocial
doble ventasBrutas // monto de ventas (es decir, total)
double tarifaComision // porcentaje de comisión
22-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Utiliza los métodos get de EmpleadoPorComision para obtener los valores de las variables de
instancia del objeto que se acaba de crear e imprimirlas en pantalla con el siguiente formato:
Actualiza los valores de ventas brutas y tarifa de comisión, pasando directamente los valores
utilizando sus métodos establecer. Y después utiliza el método toString para imprimir el
Empleado por comisión actualizado:
23-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Consideraciones ejemplo1
24-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
primerNombre
apellidoPaterno
numeroSeguridadSocial
ventasBrutas // ventas totales por semana
tarifa de comisión // porcentaje de comisión
salario base. // salario base por mes
- Un constructor.
- Método ingresos, calcula los ingresos de un empleado por comisión con salario base:
salarioBase + ( tarifaComision * ventasBrutas )
- Método toString que devuelve un objeto String que representa la información del
EmpleadoPorComision con el siguiente formato:
- Métodos establecer y obtener public para las variables de instancia private primerNombre,
apellidoPaterno, numeroSeguridadSocial, ventasBrutas, tarifaComision y salarioBase.
25-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
La clase PruebaEmpleadoBasePorComision:
26-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Consideraciones ejemplo2.
y lo pegamos en la clase
EmpleadoBaseMasComision,
después modificamos esta clase para incluir un salario base y los métodos que manipulan
ese salario base.
A menudo, este método de “copiar y pegar” provoca errores y además, se pueden esparcir
los errores por distintas copias físicas del mismo código a lo largo de un sistema, con lo que
el mantenimiento del código se convierte en una pesadilla.
¿Existe alguna manera de “absorber” las variables de instancia y los métodos de una clase, de
manera que formen parte de otras clases sin tener que copiar el código?
Copiar y pegar código de una clase a otra puede esparcir los errores a través de
varios archivos de código fuente. Para evitar la duplicación de código (y
posiblemente los errores) usa la herencia o, en algunos casos, la composición, en
vez del método de “copiar y pegar” cuando se desea que una clase “absorba” las
variables de instancia y los métodos de otra clase.
27-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
EmpleadoPorComision
EmpleadoBasePorComision2
Importante:
28-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
29-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Consideraciones ejemplo3.
El método ingresos y toString genera errores debido a que las variables de instancia de la
superclase EmpleadoPorComision son private; no se permite a los métodos de la subclase
EmpleadoBaseMasComision2 acceder a las variables de instancia private de la superclase
EmpleadoPorComision.
30-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Los miembros protected de una superclase se heredan por todas las subclases de esa
superclase.
EmpleadoPorComision2
EmpleadoBasePorComision3
Con las variables de instancia protected, la subclase obtiene acceso a las variables de
instancia, pero las clases que no son subclases y las clases que no están en el mismo
paquete no pueden acceder a estas variables en forma directa; recuerda que los miembros
de clase protected son también visibles para las otras clases en el mismo paquete.
31-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Consideraciones ejemplo4.
En este ejemplo declaramos las variables de instancia de la superclase como protected, para
que las subclases pudieran heredarlas. El uso de variables de instancia protected
crea varios problemas potenciales:
En primer lugar, el objeto de la subclase puede establecer el valor de una variable heredada
directamente, sin utilizar un método establecer(set). Por lo tanto, un objeto de la
subclase puede asignar un valor inválido a la variable, con lo cual el objeto
queda en un estado inconsistente.
El segundo problema con el uso de variables de instancia protected es que hay más
probabilidad de que los métodos de la subclase se escriban de manera que dependan de la
implementación de datos de la superclase. Si hay variables de instancia protected en la
superclase, tal vez necesitemos modificar todas las subclases de esa superclase si cambia la
implementación de ésta. Por ejemplo, si por alguna razón tuviéramos que cambiar los
nombres de las variables de instancia primerNombre y apellidoPaterno por nombre y apellido,
entonces tendríamos que hacerlo para todas las ocurrencias en las que una subclase haga
referencia directa a las variables de instancia primerNombre y apellidoPaterno de la
superclase. En tal caso, se dice que el software es frágil o quebradizo, ya que un pequeño
cambio en la superclase puede “quebrar” la implementación de la subclase. Es
conveniente que el programador pueda modificar la implementación de la
superclase sin dejar de proporcionar los mismos servicios a las subclases.
32-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Un tercer problema es que los miembros protected de una clase son visibles para todas las
clases que se encuentren en el mismo paquete que la clase que contiene los miembros
protected; esto no siempre es conveniente.
33-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
EmpleadoPorComision3
EmpleadoBaseMasComision4
Los métodos ingresos y toString deben utilizar los métodos obtener (get) de la clase. Si
decidimos modificar los nombres de las variables de instancia, no habrá que modificar las
declaraciones de ingresos y de toString; sólo habrá que modificar los cuerpos de los métodos
obtener y establecer que manipulan directamente estas variables de instancia.
34-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
La nueva versión obtiene la porción de los ingresos del empleado, con base en la comisión
solamente, mediante una llamada al método ingresos de EmpleadoPorComision3 con la
expresión super.ingresos(). El método ingresos de EmpleadoBasePorComision4 suma
después el salario base a este valor, para calcular los ingresos totales del empleado.
Observa la sintaxis utilizada para invocar un método sobrescrito de la superclase desde una
subclase: super y un punto (.) antes del nombre del método de la superclase.
Si un método realiza todas o algunas de las acciones que necesita otro método, se hace una
llamada a ese método en vez de duplicar su código. Esta forma de invocar métodos es una
buena práctica de ingeniería de software
35-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Java sólo requiere el acceso al archivo .class de la superclase, para poder compilar y
ejecutar cualquier programa que utilice o extienda la superclase.
Esta poderosa capacidad hace que Java sea muy atractivo para los programadores
independientes, quienes pueden desarrollar clases propietarias y ponerlas a disposición de
los usuarios en formato de bytecode. Después, los usuarios pueden hacer nuevas clases a
partir de estas clases de biblioteca, sin necesidad de acceder al código fuente propietario.
A pesar del hecho de que al heredar de una clase no se requiere acceso al código fuente de
esa clase, en muchas ocasiones, los programadores insisten en ver el código fuente para
comprender cómo está implementada dicha clase.
Observaciones:
36-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
6. La clase object
Todas las clases en Java heredan, ya sea en forma directa o indirecta de la clase Object
(paquete java.lang), por lo que todas las demás clases heredan sus 11 métodos.
clone
Este método protected, que no recibe argumentos y devuelve una referencia Object, realiza
una copia del objeto en el que se llama. Cuando se requiere la clonación para los objetos de
una clase, ésta debe sobrescribir el método clone como un método public, y debe
implementar la interfaz Cloneable (paquete java.lang). La implementación predeterminada de
este método realiza algo que se conoce como copia superficial: los valores de las variables
de instancia en un objeto se copian a otro objeto del mismo tipo. Para los tipos por referencia,
sólo se copian las referencias.
equals
Este método compara la igualdad entre dos objetos; devuelve true si son iguales y false en
caso contrario. El método recibe cualquier objeto como argumento. Cuando debe compararse
la igualdad entre objetos de una clase en particular, la clase debe sobrescribir el método
equals para comparar el contenido de los dos objetos.
finalize
El recolector de basura llama a este método protected para realizar tareas previas sobre
ojetos no referenciados.
getClass
Todo objeto en Java conoce su tipo en tiempo de ejecución. El método getClass devuelve un
objeto de la clase Class (paquete java.lang), el cual contiene información acerca del tipo del
objeto, como el nombre de su clase.
hashCode
Devuelve un identificador unívoco después de aplicarle un algoritmo hash.
toString
Este método devuelve una representación String de un objeto. La implementación
predeterminada de este método devuelve el nombre del paquete y el nombre de la clase del
objeto, seguidos por una representación hexadecimal del valor devuelto por el método
hashCode del objeto.
37-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
String nombre;
String instituto;
int edad;
public Alumno(String nombre, String instituto, int edad) {
this.nombre = nombre;
this.instituto = instituto;
this.edad = edad;
}
}
38-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Al crear una instancia de un objeto de una subclase se empieza una cadena de llamadas a
los constructores: el constructor de la subclase invoca al constructor de su superclase, ya
sea en forma explícita (por medio de la referencia super) o implícita (llamando al constructor
predeterminado o sin argumentos de la superclase). Si la superclase se deriva de otra clase
(como sucede con cualquier clase, excepto Object), el constructor de la superclase invoca al
constructor de la siguiente clase que se encuentre a un nivel más arriba en la jerarquía, y así
sucesivamente.
A tener en cuenta:
Java asegura que, aún si un constructor no asigna un valor a una variable de
instancia, la variable de todas formas se inicializa con su valor predeterminado (es
decir, 0 para los tipos numéricos primitivos, false para los tipos boolean y null para
las referencias).
39-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Constructores:
Superclase:
public EmpleadoPorComision3( String nombre, String apellido, String nss, double ventas,
double tarifa ) {
Subclase:
40-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
EmpleadoBaseMasComision4 empleado1 =
new EmpleadoBaseMasComision4(
"Lisa", "Simpson", "10/123456", 2000, .06, 800 );
System.out.println();
EmpleadoBaseMasComision4 empleado2 =
new EmpleadoBaseMasComision4(
"Mark", "Pasado del Río", "88/888-8888", 8000, .15, 2000 );
}
}
Ejecución:
Constructor de EmpleadoPorComision3:
con sueldo base empleado por comision: Lisa Simpson
numero de seguridad social: 10/123456
ventas brutas: 2000,00
tarifa de comision: 0,06
sueldo base: 0,00
Constructor de EmpleadoBaseMasComision4:
con sueldo base empleado por comision: Lisa Simpson
numero de seguridad social: 10/123456
ventas brutas: 2000,00
tarifa de comision: 0,06
sueldo base: 800,00
Constructor de EmpleadoPorComision3:
con sueldo base empleado por comision: Mark Pasado del Río
numero de seguridad social: 88/888-8888
ventas brutas: 8000,00
tarifa de comision: 0,15
sueldo base: 0,00
Constructor de EmpleadoBaseMasComision4:
con sueldo base empleado por comision: Mark Pasado del Río
numero de seguridad social: 88/888-8888
ventas brutas: 8000,00
tarifa de comision: 0,15
sueldo base: 2000,00
41-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
En una empresa X existen tres tipos de empleados: administrativos, directivos y comerciales; sus
caracteríticas comunes se recogen en la clase Empleado.
Crear una clase llamada Empleado de la que van a heredar las clases Administrativo, Directivo y
Comercial.
Los empleados están asignados a un departamento del que se desea guardar cierta información, así
que se ha de crear una clase Departamento con las siguientes variables miembro:
- nombreDepartamento
- nombreEmpleadoJefe
- presupuesto anual en €.
Las clases Directivo, Comercial y Administrativo modelan los empleados que tienen dicha
función, dichas clases heredan de la clase Empleado y presentan las siguientes particularidades:
• Los comerciales cobran una comisión y un kilometraje neto que se modelan en la clase
Comercial como dos atributos de tipo double. La clase Comercial tiene, además los atributos
de la clase Empleado.
42-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
- Sobre-escriben los métodos toString e ingresos. Los complementos salariales son netos (ya
tienen aplicado el descuento de los impuestos).
Empleado Comercial
nombre: Lucas Ramírez
extensión telefónica: 023
salario bruto: 950.5
impuesto: 15%
hijos: 2
Departamento
nombre: informática
jefe: Nicolás Sánchez
presupuesto:9.500.000,0 €
Complementos salariales
comisión:1000.5
kilometraje:60.5
- Tienen dos constructores, uno para crear instancias con los valores por defecto para los
atributos y otro en el que se informa de todos los valores.
Crear una clase ControladorEmpleado1 que realice al menos las siguientes acciones:
Empleado Comercial
nombre: Lucas Ramirez
extensión telefónica: 023
salario bruto: 950.5
impuesto: 15%
hijos: 2
Departamento
nombre: informática
jefe: null
presupuesto:9.500.000,0 €
Complementos salariales
comisión:1000.5
kilometraje:60.5
43-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Crear una clase ControladorEmpleado2 que realice al menos las siguientes acciones:
EMPLEADO DEPARTAMENTO
https://web.dit.upm.es/~pepe/doc/fprg/javadoc.htm
http://hflorezf-es.blogspot.com.es/2012/09/java-doc.html
44-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Utilizando la jerarquía de clases del ejemplo anterior realiza una aplicación (clase
RunApp, por ejemplo) que cree un array de 5 objetos de tipo Empleado.
Recorre el array y muestra su contenido, escribe el método toString de cada objeto de tipo
Empleado guardado en el array.
45-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
- Cuentas de Ahorro
- Cuentas Corrientes
Estos dos tipos de cuentas son idénticos excepto en las siguientes diferencias:
* Las cuentas de ahorro se numeran como 5XXXX y las cuentas corrientes se numeran
como 2XXXX. Cada vez que se crea una nueva cuenta, se debe generar su identificador:
– En las cuentas corrientes 20001, 20002, 20003 ….
– En las cuentas de ahorro 50001, 50002, 50003 …..
Siendo el primer dígito el identificador de cuenta corriente o cuenta de ahorro y el resto
(0001, 0002, 0003) el número de cuenta secuencial que se genera automáticamente cuando
se crea la cuenta.
* Cada cuenta tiene un contador propio que va indicar el número de cuenta (objeto) de cada
clase que se crea.
* Las cuentas corrientes no se les paga interés si el saldo no supera los 500 euros. Las
cuentas de ahorro siempre se les paga interés.
De la cuenta corriente y la cuenta de ahorro se guarda el identificador (id), el titular (nombre del
titular de la cuenta), el saldo y el interés anual (interesAnual, 8%).
– Generar Id.
– Ingresar dinero, se suma (ingresa) una cantidad dada al saldo.
– Sacar dinero, se resta (saca) una cantidad dada al saldo.
– Cargo mensual de mantenimiento de cuenta, se resta al saldo.
– Se cobran los intereses mensualmente (lo que corresponde a un mes del interés anual), se
suma a la cuenta.
– Método de representación de la cuenta bancaria, toString().
46-47
Tema 11. Programación orientada a objetos: Herencia. Curso 2018/2019
Siguiendo los principios de reutilización de código (se detectan clases con un comportamiento
común ) y especialización (se detecta que una clase es un caso especial de otra ), se puede modelar
el problema a través de una jerarquía de clases.
¿Puedes obtener una clase general con las características comunes de cuenta corriente y
cuenta de ahorros?
Superclase CuentaBancaria
Las clases abstractas solamente se pueden usar como clases base para otras clases. No se pueden
crear objetos pertenecientes a una clase abstracta.
47-47