188 votes

s’étendant de deux classes

Comment est-ce que je peux faire cela

de plus, je voudrais savoir qui est que cette approche est OK que j’ai fait les menus en classe qui est ControlMenu et j’étends dans le reste de l’activités. Merci

184voto

Volure DarkAngel Points 5916

Vous ne pouvez Étendre une classe unique. Et de mettre en œuvre des Interfaces à partir de nombreuses sources.

Prolongement de plusieurs classes n'est pas disponible. La seule solution je pense est de ne pas hériter de la classe, mais au lieu d'avoir une variable interne de chaque classe et de faire plus d'une procuration en redirigeant les requêtes vers votre objet à l'objet que vous voulez qu'ils aillent.

 public class CustomActivity extends Activity {

     private AnotherClass mClass;

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mClass = new AnotherClass(this);
     }

     //Implement each method you want to use.
     public String getInfoFromOtherClass()
     {
        return mClass.getInfoFromOtherClass();
     }
 }

c'est la meilleure solution que j'ai trouver. Vous pouvez obtenir la fonctionnalité de deux classes, et Encore seulement en fait être un type de classe.

L'inconvénient est que vous ne rentrent pas dans le Moule de la classe Interne à l'aide d'un plâtre.

57voto

Ifte Points 171

Pourquoi ne pas utiliser une classe interne (imbrication)

38voto

David Souther Points 4414

Vous souhaitez utiliser des interfaces. Généralement, l'héritage multiple est mauvais à cause de la Diamond Problème:

abstract class A {
 abstract void foo();
}

class B extends A {
 void foo () { return "bar"; }
}

class C extends A  {
 void foo() {return "baz"; }
}

class D extends B, C {
 void foo() { return super.foo(); } //What do I do? Which method should I call?
}

C++ et d'autres ont un couple de méthodes pour résoudre ce problème, par exemple

void foo() { return B::foo(); }

mais Java utilise uniquement des interfaces.

La Java des Sentiers ont une excellente introduction sur les interfaces: http://download.oracle.com/javase/tutorial/java/concepts/interface.html Vous aurez probablement envie de la suivre, avant de plonger dans les nuances de l'API Android.

22voto

Nicolas78 Points 3789

Oui, comme tout le monde a écrit, vous ne pouvez pas faire de l'héritage multiple en Java. Si vous disposez de deux classes à partir de laquelle vous souhaitez utiliser le code, vous devez généralement juste une sous-classe (disons de classe A). Pour la classe B, vous résumé les méthodes importantes de l'interface BInterface (laid nom b ut vous voyez l'idée), puis dites Principale s'étend Un implémente B. à l'Intérieur, vous pouvez instancier un objet de classe B et de mettre en œuvre toutes les méthodes de BInterface en appelant les fonctions correspondantes de B.

Cela modifie l' "est-un" lien "est-un" de la relation en tant que votre Principale maintenant est Un, mais il a une B. Selon votre cas, vous pourriez même faire ce changement explicite par le retrait de la B interface de votre classe, et au lieu de fournir un moyen d'accès à votre objet B directement.

13voto

slandau Points 6710

Boo, faire une interface. Java n’est pas l’héritage multiple.

http://CSIS.Pace.edu/~Bergin/patterns/multipleinheritance.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X