Cómo agregar el mismo método a varias clases (actividad)
Tengo 3 clases A, B y C. Estas se extienden otra clase D.
La clase D tiene un método que se utiliza en todas las clases A, B y C.
- Propósito de los parámetros de varianza de AsyncTask
- ¿Por qué vamos a Android ya que tenemos J2ME y WML para crear aplicaciones móviles?
- Cómo cambiar el cuerpo en OkHttp Response?
- La adición de un día a un calendario en Android falla el 31
- Importar paquetes android no puede ser resuelto
Ahora el problema es que las clases A, B y C deben extender clases diferentes y usar sólo el mismo método de la clase D.
No puedo creer que deba copiar y pegar el método en todas mis clases. ¿Hay algo como un include para la función en C?
Por cierto, estoy trabajando en una aplicación de Android. La Clase D extiende Actividad y tiene un método para administrar un menú común de las actividades A, B y C de Android (este es el enfoque oficial según se informa en la documentación de Android). Sin embargo necesito que estas actividades extiendan clases diferentes como ActivityList y no sólo la clase Activity.
- 'RealmNoticeModelClass' tiene una clave primaria, use 'createObject (Class <E>, Object)' en su lugar
- Cómo hacer espacio entre spannable cadena en Android?
- DexIndexOverflowException Con la API de Google Maps
- Android: cómo acceder a la tabla de contactos de SIM con el SDK?
- Java - Timer.cancel () v / s TimerTask.cancel ()
- Dibuja una imagen en modo FullScreen Android
- Después de la actualización de Google Play Service a la versión 13, recibí un error
- Android - Transformar clases con Multidexlist para depurar - Instagram JSON Parser
Si su método no necesita acceder al estado privado, agregue un método estático en la clase D y llame al método estático de A, B, C.
Si su método necesita acceder al estado privado, vea si puede factorizar la necesidad de usar el estado privado añadiendo un getter privado de paquete a cada clase y, a continuación, utilice el método en A.
De lo contrario, trate de factorizar algo de la lógica a una interfaz común en lugar de superclase.
De lo contrario, intente delegar en una clase auxiliar. (Por ejemplo, la composición en lugar de herencia como @ Marcelo indicado)
De lo contrario, repita los métodos en cada clase A, B, C.
Como un ejemplo del enfoque de interfaz común, combinado con un método estático en D:
interface MyThing { public void doMyThing(String subject); public List<String> getThingNames(); } class D { static void doSomethingComplicatedWithMyThing(MyThing thing) { for (String name : thing.getThingNames()) { boolean useThing = /* complicated logic */ if (useThing) thing.doMyThing(name); } } } class A extends SomeClass implements MyThing { /* implement methods of MyThing */ void doSomethingComplicated() { D.doSomethingComplicatedWithMyThing(this); } } class B extends SomeOtherClass implements MyThing { /* implement methods of MyThing */ void doSomethingComplicated() { D.doSomethingComplicatedWithMyThing(this); } } class C extends YetAnotherClass implements MyThing { /* implement methods of MyThing */ void doSomethingComplicated() { D.doSomethingComplicatedWithMyThing(this); } }
Debe tener una variable de instancia de tipo D en cada una de sus definiciones de clase A, B y C y utilizar el método de esa instancia. De esta manera A, B y C pueden extender otras clases.
En este caso usted favorece la composición sobre la herencia .
Java no admite herencia múltiple. Una clase sólo puede extender una sola clase. Tal vez sea una buena idea usar una interfaz. Puede crear una interfaz que contenga el método de la clase D y hacer que las clases A, B y C implementen esta interfaz .. No sé si esto ayuda. Aquí tiene un enlace que puede ser de utilidad: http://java.sys-con.com/node/37748