Расширение от двух классов

Как я могу это сделать:

public class Main extends ListActivity , ControlMenu 

Кроме того, я хотел бы знать, что этот подход в порядке, что я создал меню в классе, которое является ControlMenu, и я распространяю остальные действия.

Solutions Collecting From Web of "Расширение от двух классов"

Вы можете расширить только один класс. И реализуйте интерфейсы из многих источников.

Расширение нескольких классов недоступно. Единственное решение, о котором я могу думать, не наследует ни один из классов, но вместо этого имеет внутреннюю переменную каждого класса и делает больше прокси, перенаправляя запросы к вашему объекту объекту, к которому вы хотите перейти.

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

Это лучшее решение, которое я придумал. Вы можете получить функциональность от обоих классов, и все еще только на самом деле имеют один тип класса.

Недостаток заключается в том, что вы не можете вписаться в форму для внутреннего класса с использованием броска.

Почему не использовать внутренний класс (вложенность)

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

Вы захотите использовать интерфейсы. Как правило, множественное наследование плохо из-за проблемы с алмазом:

 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 ++ и другие имеют пару способов решить эту проблему, например

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

Но Java использует только интерфейсы.

В Java Trails есть отличное введение в интерфейсы: http://download.oracle.com/javase/tutorial/java/concepts/interface.html Вы, вероятно, захотите следовать этому, прежде чем погрузиться в нюансы в API Android.

Как все говорили. Нет, ты не можешь. Однако, несмотря на то, что за многие годы люди много раз говорили о том, что вы должны использовать несколько интерфейсов, они на самом деле не пошли. Надеюсь, это поможет.

Скажем, у вас есть class Foo и class Bar который вы оба хотите попробовать в class FooBar . Конечно, как вы сказали, вы не можете делать:

 public class FooBar extends Foo, Bar 

Люди уже в той или иной степени объясняют это. Вместо этого напишите interfaces как для Foo и для Bar охватывающих все их общедоступные методы. Например

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

А теперь сделайте Foo и Bar применимыми относительные интерфейсы:

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

Теперь, с class FooBar , вы можете реализовать как FooInterface и BarInterface , сохраняя объект Foo и Bar и просто передавая методы прямо:

 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); } //... } 

Бонус для этого метода заключается в том, что объект FooBar подходит для форм как FooInterface и BarInterface . Это означает, что это прекрасно:

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

Надеюсь, что это поясняет, как использовать интерфейсы вместо нескольких расширений. Даже если я опаздываю на несколько лет.

Да, как и все остальные, вы не можете выполнять множественное наследование в Java. Если у вас есть два класса, из которых вы хотите использовать код, вы обычно просто подклассифицируете один (скажем, класс A ). Для класса B вы абстрагируете важные методы этого на интерфейс BInterface (уродливое имя, но вы получаете идею), а затем говорите, что Main extends A implements BInterface . Внутри вы можете создать объект класса B и реализовать все методы BInterface , вызвав соответствующие функции B

Это изменяет отношение «is-a» к отношениям «has-a», поскольку ваша « Main теперь является A , но имеет B В зависимости от вашего BInterface использования вы можете даже сделать это изменение явным, удалив BInterface из вашего класса A и вместо этого предоставляйте метод прямого доступа к вашему объекту B.

Сделайте интерфейс. Java не имеет множественного наследования.

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

Java не поддерживает множественное наследование, но вы можете попробовать реализовать два или более интерфейса.

Да. Сланда – это правильно. Java не позволяет распространяться на несколько классов.

То, что вы хотите, это, вероятно, public class Main extends ListActivity implements ControlMenu . Я предполагаю, что вы пытаетесь составить список.

Надеюсь, это поможет.

Расширение от нескольких классов не допускается в java .. для предотвращения смертельного алмаза смерти !

возможно

 public class ParallaxViewController<T extends View & Parallaxor> extends ParallaxController<T> implements AbsListView.OnScrollListener { //blah }