2011-06-07 16 views
5

tengo 3 clases A, B, y C. Estos se extienden otra clase D.cómo agregar mismo método para múltiples clases (actividad)

Clase D tiene un método que se utiliza en todas las clases A, B, y C.

Ahora el problema es que las clases A, B, y C se debe extender diferentes clases y usar simplemente el mismo método de la clase D.

no puedo creer que debería copiar y pegar el método en todas mis clases ¿Hay algo así como incluir para la función en C?

Por cierto, estoy trabajando en una aplicación de Android. La clase D amplía la actividad y tiene un método para administrar un menú común de actividades de Android A, B y C (este es el enfoque oficial según lo informado en la documentación de Android). Sin embargo, necesito que estas actividades extiendan diferentes clases como ActivityList y no solo la clase Activity.

Respuesta

6

Si el método no necesita acceder estado privada, añadir un método estático de la clase D, y llamar al método estático de la A, B, C

Si el método no necesita acceder estado privada, ver si se puede factorizar la necesidad de utilizar el estado privada mediante la adición de un captador paquete-privada para cada clase, y luego usar el método de A.

de lo contrario, trate de factorización de parte de la lógica de una interfaz común en lugar de superclase

De lo contrario, intente delegar en una clase auxiliar. (Por ejemplo, composición en lugar de herencia como @Marcelo indicaron)

caso contrario, repetir los métodos en cada clase A, B, C.


como un ejemplo del enfoque de interfaz común, en combinación con un método estático 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); 
    } 
} 
3

Debe tener una variable de instancia de tipo D en cada una de sus definiciones de clase A, B y C, y usar el método de esa instancia. De esa forma, A, B y C aún pueden extender otras clases.

En este caso, usted prefiere composition sobre inheritance.

1

Java no soporta herencia múltiple .. una clase sólo puede extender una sola clase. Quizás sea una buena idea usar una interfaz. Puede crear una interfaz que contenga el método de la clase D y crear las clases A, B y C para implementar esta interfaz. No sé si esto ayuda. Aquí hay un enlace que puede ser útil para usted: http://java.sys-con.com/node/37748

Cuestiones relacionadas