Está en la página 1de 8

U.T.O. – F.N.I. ING. DE SISTEMAS – ING.

INFORMÁTICA

SIS – 2330 METODOLOGÍA DE LA PROGRAMACIÓN III


GUÍA DE LABORATORIO # 3

TEMA: CLASES ABSTRACTAS EN JAVA.


OBJETIVOS.

 Creación y utilización de clases abstractas.

FUNDAMENTO TEORICO.

Una clase abstracta es una clase con 0 o más métodos sin implementar. Cuando una clase es
abstracta, no se pueden crear objetos de estas clases, en las clases hijas será donde se implementen los
métodos no implementados en la clase padre.

Para indicar que una clase es abstracta, escribimos abstract entre el modificador de acceso y class, así
quedaría:

1 public abstract class Empleado

Dejamos un método sin implementar, por ejemplo, el método plus, para que cada clase hija implemente
su propio método de forma diferente:

1 public abstract boolean plus (double sueldoPlus);

Como vemos, incluimos la palabra abstract igual que en la clase.

La idea de las clases abstractas es que tengamos una clase padre que sirva como plantilla para las
clases hijas, en las clases hijas se implementaran los métodos abstractos de la clase padre.

Aunque no puedan crear objetos, si se pueden crear array de objetos de una clase abstracta.

Las clases abstractas tienen una gran ventaja y es que no necesita hacer casting de objetos ni utilizar el
operador instanceof.

Página 1
Página 2
ACTIVIDAD DE CLASE.

Veamos un ejemplo completo:

–Clase padre abstracta

1 /**
2 * Clase Empleado
3 *
4 * Contiene informacion de cada empleado, es una clase abstracta
5 *
6 * @author Fernando
7 * @version 1.0
8 */
9 public abstract class Empleado {
10
11 //Constantes
12
13 /**
14 * Constante SALARIO_DEF
15 */
16 protected final static double SALARIO_DEF=600;
17
18 //Atributos
19
20 /**

Página 3
21 * Nombre del empleado
22 */
23 protected String nombre;
24 /**
25 * Apellido del empleado
26 */
27 protected String apellido;
28 /**
29 * Edad del empleado
30 */
31 protected int edad;
32 /**
33 * Salario del empleado
34 */
35 protected double salario;
36
37 //Metodos publicos
38
39 /**
40 * Devuelve el nombre del empleado
41 * @return nombre del empleado
42 */
43 public String getNombre() {
44 return nombre;
45 }
46
47 /**
48 * Modifica el nombre de un empleado
49 * @param nombre
50 */
51 public void setNombre(String nombre) {
52 this.nombre = nombre;
53 }
54
55 /**
56 * Devuelve la edad de un empleado
57 * @return edad del empleado
58 */
59 public int getEdad() {
60 return edad;
61 }
62
63 /**
64 * Modifica la edad de un empleado
65 * @param edad
66 */
67 public void setEdad(int edad) {
68 this.edad = edad;
69 }

Página 4
70
71 /**
72 * Devuelve el salarioBase
73 * @return salarioBse
74 */
75 public double getSalario() {
76 return salario;
77 }
78
79 /**
80 * Modifica el salarioBase de los empleados
81 * @param salarioBase
82 */
83 public void setSalario(double salario) {
84 this.salario = salario;
85 }
86
87 public abstract boolean plus (double sueldoPlus);
88
89 //Constructores
90 /**
91 * Constructor por defecto
92 */
93 public Empleado(){
94 this ("", "", 0, SALARIO_DEF);
95 }
96
97 /**
98 * Constructor con 4 parametros
99 * @param nombre nombre del empleado
100 * @param apellido nombre del empleado
101 * @param edad edad del empleado
102 * @param salario salario del empleado
103 */
104 public Empleado(String nombre, String apellido, int edad, double salario){
105 this.nombre=nombre;
106 this.apellido=apellido;
107 this.edad=edad;
108 this.salario=salario;
109 }
110}

–Clase hija

1 /**
2 * Clase Comercial
3 *
4 * Contiene información de un comercial, un tipo de empleado
5 *

Página 5
6 * @author Fernando
7 * @version 1.0
8 */
9 public class Comercial extends Empleado{
10
11 //Atributos, aunque no indiquemos nada es como si tuviera los atributos del padre
12
13 /**
14 * Comision por venta del comercial
15 */
16 private double comision;
17
18 /**
19 * Suma un plus al salario del empleado si el empleado tiene una comision menor que 50
20 * @param sueldoPlus
21 * @return</pre>
22<ul>
23<ul>*
24 <li>true: se suma el plus al sueldo</li>
25</ul>
26</ul>
27&nbsp;
28<ul>
29<ul>*
30 <li>false: no se suma el plus al sueldo</li>
31</ul>
32</ul>
33&nbsp;
34<ul>*</ul>
35<pre>
36 */
37 public boolean plus (double sueldoPlus){
38
39 boolean aumento=false;
40 if (comision<50){
41 salario+=sueldoPlus;
42 aumento=true;
43 }
44 return aumento;
45 }
46
47 /**
48 * Constructor por defecto
49 */
50 public Comercial(){
51 super();
52 this.comision=0;
53 }
54

Página 6
55 /**
56 * Constructor con 5 parametros
57 * @param nombre nombre del comercial
58 * @param apellido apellido del comercial
59 * @param edad edad del comercial
60 * @param salario salario del comercial
61 * @param comision comision del comercial
62 */
63 public Comercial(String nombre, String apellido, int edad, double salario, double comision) {
64 super(nombre, apellido, edad, salario);
65 this.comision=comision;
66 }
67}

–Clase ejecutable

1 public class EmpleadoApp {


2
3 public static void main(String[] args) {
4
5 //Nos saltara un error, no se pueden crear objetos de una clase abstracta
6 Empleado empleado1=new Empleado();
7
8 //La creacion es correcta
9 Comercial comercial1=new Comercial();
10 }
11
12}

PROBLEMAS PROPUESTOS.

Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo
provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto
getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la
clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y
muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.
CUESTIONARIO.

Responder a lo siguiente:

1. ¿Qué es una clase abstracta?


2. ¿Cuál o cuáles son las condiciones para que una clase sea abstracta?
3. ¿Que son métodos abstractos?
4. ¿Qué pasa si dentro de una clase hay 5 métodos implementados y 1 no implementado?
5. ¿Qué ocurre cuando se hereda de una clase abstracta?
6. ¿Si no se implementan los métodos en el hijo que pasa con la clase hija?

Página 7
7. ¿Se puede instan-ciar de una clase abstracta?
8. ¿Cuál es la diferencia entre una clase abstracta y una clase normal?
9. ¿Cuál es la diferencia entre un método abstracto y uno no abstracto?

Página 8

También podría gustarte