Está en la página 1de 18

Clases Abstractas

 Una clase abstracta es una clase de la que no se


puede crear objetos. La utilidad de estas clases estriba
en que otras clases hereden de ésta, por lo que con
ello conseguiremos reutilizar código.

 Java proporciona las clases y métodos abstractos. Un


método abstracto es un método declarado en una
clase para el cual esa clase no proporciona la
implementación (el código).

 Mientras las clases abstractas se heredan no todos sus


métodos deben ser redefinidos por quien hereda, es
decir en una clase abstracta no necesariamente
todos sus métodos son abstractos, pueden incluir una
función única que haga lo mismo de la misma forma
siempre y no necesite redefinición.
2
 Los métodos para los que no aporte una
implementación serán declarados a su vez
abstractos. Si una clase tiene un método abstract
es obligatorio que la clase sea abstract.

 Todas las subclases que hereden de una clase


abstracta tendrán que redefinir los métodos
abstractos dándoles una implementación.

 Una clase abstracta es una clase que tiene al


menos un método abstracto. Una clase que
extiende a una clase abstracta debe
implementar los métodos abstractos (escribir el
código) o bien volverlos a declarar como
abstractos, con lo que ella misma se convierte
también en clase abstracta.

3
 Clase parcialmente definida
 No se puede hacer un new de una clase
abstracta ( no tiene instancias)
 Los métodos que no se van a definir deben
tener el título abstract
 Las clases abstractas no pueden tener
métodos privados o estáticos

4
 Si una clase tiene un método abstract es
obligatorio que la clase sea abstract.

 Todas las subclases que hereden de una clase


abstracta tendrán que redefinir los métodos
abstractos dándoles una implementación.

 Una clase abstracta es una clase que tiene al


menos un método abstracto. Una clase que
extiende a una clase abstracta debe implementar
los métodos abstractos (escribir el código) o bien
volverlos a declarar como abstractos, con lo que
ella misma se convierte también en clase
abstracta.

6
7
abstract class Empleado {
...
abstract float calcularSueldo();
...
}
class Operario extends Empleado {
...
float calcularSuedo() {
// codigo para definir sueldo Operario
...
}
}

8
 La clase abstracta se declara simplemente con el
modificador abstract en su declaración.
 Los métodos abstractos se declaran también con el
mismo modificador, declarando el método pero sin
implementarlo (sin el bloque de código encerrado
entre {}).
 La clase derivada se declara e implementa de forma
normal, como cualquier otra. Sin embargo si no
declara e implementa los métodos abstractos de la
clase base (en el ejemplo el método calcularSueldo)
el compilador genera un error indicando que no se
han implementado todos los métodos abstractos y
que, o bien, se implementan, o bien se declara la
clase abstracta.

9
 Se pueden crear referencias a clases abstractas
como cualquier otra. No hay ningún problema en
poner:
FiguraGeometrica figura;

 Sin embargo una clase abstracta no se puede


instanciar, es decir, no se pueden crear objetos de
una clase abstracta. El compilador producirá un error
si se intenta:
FiguraGeometrica figura = new FiguraGeometrica();

 Esto es coherente dado que una clase abstracta no


tiene completa su implementación y encaja bien con
la idea de que algo abstracto no puede
materializarse.

10
Polimorfismo
 Característica de Java que permite tomar como
algo igual a un nivel superior dos cosas que son
diferentes a un nivel más bajo.
 Ejemplo: animal, gato y perro. Los dos son
animales a un nivel alto de abstracción (animal)
pero diferentes a un nivel inferior. El polimorfismo
básicamente permite olvidarse de ciertas
características específicas de varios objetos para
centrarse en lo que tengan en común, en lo que
los haga iguales.
 Java logra ofrecer esta habilidad gracias a dos
cosas: las clases y métodos abstractos y las
interfaces.

12
 Posibilidad de que un método tenga el
mismo nombre y produzca el mismo efecto
básico pero esté implementado de forma
distinta en las subclases.
 Redefinición de métodos
◦ La subclase re-escribe el método de la Superclase
◦ Cuando una instancia de la subclase llama el
método re-escrito, es su propia definición

13
14
class Superclase{

public tipo m1(par1,par2,..,parn){.. }
}
class Subclase extends Superclase{

public tipo m1(par1,par2,..,parn){..}
}

15
16
17
Método ToString
Clase Método Ingresos

Nombre
Empleado abstract
Número de seguro social: NSS

Empleado asalariado: Nombre


EmpleadoAsalariado salarioSemanal Número de seguro social: NSS
Salario semanal: salarioSemanal

Si horas <= 40
sueldo*horas
Si horas > 40 Empleado por horas: Nombre
40*sueldo+(horas-40)*sueldo*1.5 Número de seguro social: NSS
EmpleadoPorHoras
Sueldo por horas: sueldo
Horas trabajadas: horas

Empleado por comisión: Nombre


Número de seguro social: NSS
EmpleadoPorComision tarifaComision*ventasBrutas
Ventas brutas: ventasBrutas
Tarifa de comisión: tarifaComision

Empleado por comisión con salario base: Nombre


Número de seguro social: NSS
EmpleadoBaseMasComision (tarifaComision*ventasBrutas)+salarioBase Ventas brutas: ventasBrutas
Tarifa de comisión: tarifaComision
Salario base: salarioBase

18

También podría gustarte