Java - Unificar código en clase abstracta

 
Vista:
sin imagen de perfil

Unificar código en clase abstracta

Publicado por CaTZ (8 intervenciones) el 14/01/2015 15:56:28
Buenas tardes,

Tengo un problemilla con un tema y creo que es porque no tengo claro algunos conceptos.

Lo que tengo que hacer es unificar el código idéntico de 2 clases en otra clase abstracta para evitar duplicar el código.

Suponiendo que en Class1 y en Class2 hay 2 métodos (Metodo1 y Metodo2) que comparten código, sería meter ese código en una tercera clase abstracta (AbstractClass) para unificar el código y así cuando haya que modificar algo sólo se modifique en un sitio. El problema que tengo es que no se cómo tengo que llamar a los métodos de la clase abstracta desde las otras clases ya que yo tenía entendido que en la clase abstracta sólo se ponía el método (sin implementar código) y desde cada clase se controlaba el comportamiento.

Pues bien...yo he pensado en esto (de forma resumida):

AbstractClass
1
2
3
4
5
6
7
8
9
10
public abstract class AbstractClass{
              public boolean Metodo1 {
                    bla bla bla bla......
                    return true;
              }
              public boolean Metodo2 {
                    bla bla bla bla......
                    return false;
              }
}

Class1
1
2
3
4
public class Class1 extends AbstractClass{
              public boolean Metodo1();
              public boolean Metodo2();
}

Class2
1
2
3
4
public  Class2 extends AbstractClass{
              public boolean Metodo1();
              public boolean Metodo2();
}

¿Cómo debería hacerlo?

Muchas gracias de antemano!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil

Unificar código en clase abstracta

Publicado por Pedro (81 intervenciones) el 17/01/2015 17:42:00
Tienes un pequeño lío mental.

Una clase abstracta puede tener métodos implementados y métodos sin implementar, solo definidos. Esta característica hace que no pueda ser instanciada y le aporta dos ventajas:

1- Los métodos implementados son heredados por la clase hija, es decir, la que "extiende" a la abstracta. Si hago un cambio en la clase abstracta en un método implementado todos los hijos quedarán actualizados por así decirlo.

2- Los métodos no implementados suelen describir un comportamiento común que realizará cualquier clase que la implemente pero cada hijo lo hará de una forma concreta.

Un ejemplo:

Imagina que tenemos una clase abstracta Empleado con dos métodos fichar y trabajar. Sabemos que todos los empleados fichan siempre de la misma forma y es en una máquina a la entrada del trabajo pero dependiendo si tienen una categoría profesional u otra trabajaran en cosas diferentes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public abstract class Empleado{
 
     public void fichar(){
          //Operaciones para fichar
     }
 
     abstract void trabajar();
}
 
public class Administrativo extends Empleado{
 
     @override
     public void trabajar(){
          //Operaciones de trabajo de un administrativo
     }
}
 
public class Ejecutivo extends Empleado{
 
     @override
     public void trabajar(){
          //Operaciones de trabajo de un ejecutivo
     }
}

Tanto el Administrativo como el Ejecutivo podrán usar el método fichar como si lo tuviesen implementado en su propia clase porque lo heredan de Empleado.

1
2
Administrativo adm  = new Administrativo();
     adm.fichar();


Espero haber sido de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Unificar código en clase abstracta

Publicado por CaTZ (8 intervenciones) el 19/01/2015 08:12:03
Muchas gracias Pedro, ahora ya lo tengo todo más que claro! :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar