Extendiéndose de dos clases

Cómo puedo hacer esto:

public class Main extends ListActivity , ControlMenu 

También, me gustaría saber que es este enfoque está bien que he hecho los menús en la clase que es ControlMenu y me estoy extendiendo en el resto de las actividades.

Sólo puede extender una sola clase. E implementar Interfaces de muchas fuentes.

La extensión de varias clases no está disponible. La única solución que puedo pensar es no heredar ninguna clase, sino tener una variable interna de cada clase y hacer más de un proxy, redirigiendo las solicitudes a su objeto al objeto que desea que vayan.

  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(); } } 

Esta es la mejor solución que he encontrado. Usted puede obtener la funcionalidad de ambas clases y aún sólo realmente ser de un tipo de clase.

La desventaja es que usted no puede caber en el molde de la clase interna usando un molde.

Por qué no utilizar una clase interna (anidamiento)

 class A extends B { private class C extends D { //Classes A , B , C , D accessible here } } 

Usted querrá utilizar interfaces. Generalmente, la herencia múltiple es mala debido al problema del diamante:

 abstract class A { abstract string foo(); } class B extends A { string foo () { return "bar"; } } class C extends A { string foo() {return "baz"; } } class D extends B, C { string foo() { return super.foo(); } //What do I do? Which method should I call? } 

C ++ y otros tienen un par de maneras de resolver esto, por ejemplo

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

Pero Java sólo utiliza interfaces.

Los rastros de Java tienen una gran introducción en interfaces: http://download.oracle.com/javase/tutorial/java/concepts/interface.html Probablemente desee seguirlo antes de bucear en los matices de la API de Android.

Como todos los demás han dicho. No, no puedes. Sin embargo, aunque la gente ha dicho muchas veces a lo largo de los años que debe utilizar múltiples interfaces que realmente no han entrado en cómo. Espero que esto ayude.

Digamos que usted tiene class Foo y class Bar que ambos quieren tratar de extender en una class FooBar . Por supuesto, como usted dijo, usted no puede hacer:

 public class FooBar extends Foo, Bar 

La gente ha entrado en las razones de esto hasta cierto punto ya. En su lugar, escriba interfaces tanto para Foo como para Bar cubren todos sus métodos públicos. P.ej

 public interface FooInterface { public void methodA(); public int methodB(); //... } public interface BarInterface { public int methodC(int i); //... } 

Y ahora haga que Foo y Bar implementen las interfaces relativas:

 public class Foo implements FooInterface { /*...*/ } public class Bar implements BarInterface { /*...*/ } 

Ahora, con la class FooBar , puede implementar tanto FooInterface como BarInterface mientras mantiene un objeto Foo y Bar y simplemente pasa los métodos directamente:

 public class FooBar implements FooInterface, BarInterface { Foo myFoo; Bar myBar; // You can have the FooBar constructor require the arguments for both // the Foo and the Bar constructors public FooBar(int x, int y, int z){ myFoo = new Foo(x); myBar = new Bar(y, z); } // Or have the Foo and Bar objects passed right in public FooBar(Foo newFoo, Bar newBar){ myFoo = newFoo; myBar = newBar; } public void methodA(){ myFoo.methodA(); } public int methodB(){ return myFoo.methodB(); } public int methodC(int i){ return myBar.methodC(i); } //... } 

El bono para este método, es que el objeto FooBar ajusta a los moldes de FooInterface y BarInterface . Eso significa que esto está perfectamente bien:

 FooInterface testFoo; testFoo = new FooBar(a, b, c); testFoo = new Foo(a); BarInterface testBar; testBar = new FooBar(a, b, c); testBar = new Bar(b, c); 

Espero que esto aclare cómo utilizar interfaces en lugar de múltiples extensiones. Incluso si tengo unos años de retraso.

Sí, como todo el mundo escribió, no se puede hacer la herencia múltiple en Java. Si tiene dos clases de las que desea utilizar el código, normalmente sólo subclase uno (diga clase A ). Para la clase B , se resumen los métodos importantes de la misma a una interfaz BInterface (nombre feo, pero se obtiene la idea), a continuación, diga Main extends A implements BInterface . En el interior, puede instanciar un objeto de clase B e implementar todos los métodos de BInterface llamando a las funciones correspondientes de B

Esto cambia la relación "is-a" a una relación "has-a" ya que su Main ahora es un A , pero tiene un B Dependiendo de su caso de uso, puede incluso hacer que el cambio sea explícito eliminando el BInterface de su clase A y en lugar de proporcionar un método para acceder a su objeto B directamente.

Hacer una interfaz. Java no tiene herencia múltiple.

http://csis.pace.edu/~bergin/patterns/multipleinheritance.html

Java no admite herencia múltiple, pero puede intentar implementar dos o más interfaces.

Sí. Slandau tiene razón. Java no permite la extensión de varias clases.

Lo que quieres es probablemente public class Main extends ListActivity implements ControlMenu . Supongo que estás tratando de hacer una lista.

Espero que ayude.

Extender de varias clases no está permitido en java .. para evitar Deadly Diamond de la muerte !

es posible

 public class ParallaxViewController<T extends View & Parallaxor> extends ParallaxController<T> implements AbsListView.OnScrollListener { //blah } 
  • Aplicación de Android dañada usando texureview
  • Cómo conseguir que Powermock funcione con Dexmaker
  • ¿Cómo obtener el número seleccionado de NumberPicker?
  • Hacer que Android Service escuche Hardware-Key Press Events
  • Cómo conservar los nodos XML que no están enlazados a un objeto cuando se utiliza SAX para analizar
  • Implementación de paquetes parecidos a Spring en Android
  • Vista de la imagen de la escala de submuestreo - haga clic en los marcadores de pin en Imageview
  • Cargando texturas en una aplicación de Android OpenGL ES
  • Actividad de Android sin ActionBar
  • Cómo utilizar parámetros con HttpPost
  • java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl no se puede convertir en javax.net.ssl.HttpsURLConnection
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.