Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Heredación de método y forzado de implementación a travez de clase abstracta

Estas en el tema de Heredación de método y forzado de implementación a travez de clase abstracta en el foro de Java en Foros del Web. Buenas tardes, tengo una duda al respecto de la heredación de métodos abstractos. Tengo una clase abstracta XX que tiene un metodo zz no abstracto ...
  #1 (permalink)  
Antiguo 26/11/2012, 12:56
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 15 años, 5 meses
Puntos: 17
Pregunta Heredación de método y forzado de implementación a travez de clase abstracta

Buenas tardes, tengo una duda al respecto de la heredación de métodos abstractos.
Tengo una clase abstracta XX que tiene un metodo zz no abstracto pero que puede ser sobrecargado:
Código Java:
Ver original
  1. abstract class XX {
  2.    protected synchronized void zz(final boolean flag) {}
  3. }
Esta clase puede ser extendida y sobrecargo el metodo sin problema:
Código Java:
Ver original
  1. final class AA extends XX {
  2.    @Override
  3.    protected final synchronized void zz(final boolean flag) {
  4.       // process
  5.    }
  6. }
Ahora, tengo otra clase YY abstracta que extiende de la clase XX, pero debe forzar la implementacion del metodo zz:
Código Java:
Ver original
  1. abstract class YY extends XX {
  2.    @Override
  3.    protected abstract synchronized void zz(final boolean flag);
  4. }
Aqui el problema. No me deja realizar el forzado de la implementacion. Es un error mio? O esto no se puede realizar en Java?
La idea es que la clase que extienda de YY deba implementar el metodo zz.
Código Java:
Ver original
  1. final class BB extends YY {
  2.    @Override
  3.    protected final synchronized void zz(final boolean flag) {
  4.       // process
  5.    }
  6. }

Gracias de antemano!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/

Última edición por hschimpf; 26/11/2012 a las 13:00 Razón: ejemplo
  #2 (permalink)  
Antiguo 26/11/2012, 13:18
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 15 años, 5 meses
Puntos: 17
Respuesta: Heredación de método y forzado de implementación a travez de clase abstrac

Pensando y analizando mi propia pregunta me respondo solo
Una clase que ya contiene cuerpo puede ser sobrecargada pero no puede volver a ser abstracta, porque ya contiene una implementacion. Nose si me entienden. Por lo menos yo me entendi
Lo que se deberia realizar en este caso es generar otro metodo abstracto y llamar al mismo desde el metodo implementado:
Código Java:
Ver original
  1. abstract class XX {
  2.    protected synchronized void zz(final boolean flag) {}
  3. }
  4. abstract class YY extends XX {
  5.    protected abstract syncronized zz2(final boolean flag);
  6.    protected final synchronized void zz(final boolean flag) {
  7.       // llamamos al metodo nuevo
  8.       zz2(flag);
  9.    }
  10. }
De esta manera la clase que extienda de YY debera implementar el metodo zz2 el cual es llamado desde le metodo zz en la clase YY.

Saludos a todos!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #3 (permalink)  
Antiguo 26/11/2012, 14:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Heredación de método y forzado de implementación a travez de clase abstrac

No sé si te he entendido bien, pero una clase aunque des código a un método abstracto, puede seguir siendo abstracta.

Tu problema es el final del método, eso indica que ese método no se puede sobreescribir.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 26/11/2012, 14:44
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 15 años, 5 meses
Puntos: 17
Respuesta: Heredación de método y forzado de implementación a travez de clase abstrac

Cita:
Iniciado por Xerelo Ver Mensaje
Tu problema es el final del método, eso indica que ese método no se puede sobreescribir.
No estoy utilizando el modificador final en la 2da clase abstracta. Solo en la clase que extiende de la 2da clase.
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #5 (permalink)  
Antiguo 27/11/2012, 02:28
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Heredación de método y forzado de implementación a travez de clase abstrac

En la segunda no, pero sí en el primera, y por eso no te funciona

Cita:
final class AA extends XX {
* *@Override
* *protected final synchronized void zz(final boolean flag) {
* * * // process
* *}
}
Por no hablar del final class en el que no me había fijado, antes de usar cosas que no conocéis, deberíais echarle un vistazo a la API.

http://journals.ecs.soton.ac.uk/java...aOO/final.html

Cita:
You can declare that your class is final; that is, that your class cannot be subclassed.
Cita:
you can use the final keyword in a method declaration to indicate to the compiler that the method cannot be overridden by subclasses.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 27/11/2012, 05:25
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 15 años, 5 meses
Puntos: 17
Respuesta: Heredación de método y forzado de implementación a travez de clase abstrac

Cita:
Iniciado por Xerelo Ver Mensaje
En la segunda no, pero sí en el primera, y por eso no te funciona
Xerelo, el problema no es en el ejemplo de la clase AA. Esa funciona si funciona. El problema es la clase BB que hereda de YY y esta a su vez de XX. la clase AA era un ejemplo de lo que si se puede realizar.
Igual ya resolvi como comente anteriormente, dado que no se puede volver a pasar a abstracto un metodo que ya tiene cuerpo en una clase superior.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/

Etiquetas: clase, forzado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.