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

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

public class Main extends ListActivity , ControlMenu 

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

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

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

  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ов, и все еще только на самом деле имеют один тип classа.

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

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

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

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

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

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

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

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

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

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

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

возможно

 public class ParallaxViewController extends ParallaxController implements AbsListView.OnScrollListener { //blah } 

Как и другая альтернатива, возможно, вы можете использовать интерфейс с реализацией метода по умолчанию. Это зависит от того, что вы хотите сделать.

Например, вы можете создать абстрактный class и интерфейс:

 public abstract class FatherClass { abstract void methodInherit() { //... do something } } public interface InterfaceWithDefaultsMethods { default void anotherMethod() { //... do something //... maybe a method with a callable for call another function. } } 

Итак, после этого вы можете расширять и реализовывать оба classа и использовать оба метода.

 public class extends FatherClass implements InterfaceWithDefaultsMethods { void methode() { methodInherit(); anotherMethod(); } } 

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

  • Render PDF-файл с помощью Java на Android
  • Путь к ресурсу в нашей папке war / WEB-INF?
  • MediaPlayer.create () всегда возвращает null
  • Обнаружение изменений состояния, внесенных в BluetoothAdapter?
  • Каков наилучший способ обмена данными между действиями?
  • java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory
  • Аутентификация и авторизация Websocket весной
  • Android Telegram App -> java.lang.UnsatisfiedLinkError: не реализована реализация для void
  • Google firebase проверяет, существует ли ребенок
  • Сравнение содержимого StringBuffer с равными
  • Сохранять широковещательный приемник после закрытия приложения
  • Давайте будем гением компьютера.