Может ли один класс расширить два класса?

Мой класс должен одновременно расширять два класса:

public class Preferences extends AbstractBillingActivity { public class Preferences extends PreferenceActivity { 

Как это сделать?

Обновление . Так как это невозможно, как я должен использовать эту функцию AbstractBillingActivity с настройками?

Обновление2 . Если я использую интерфейсы, я должен создать:

  1. BillingInterface

     public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity { } 
  2. PreferenceActivity

     public interface PreferenceActivity { } 
  3. AbstractBillingActivity

     public interface AbstractBillingActivity { void onCreate(Bundle savedInstanceState); } 

а потом

 public class Preferences implements BillingInterface { 

Solutions Collecting From Web of "Может ли один класс расширить два класса?"

Java не поддерживает множественное наследование.

Я могу придумать несколько обходных решений:

Первая – это агрегация: создайте класс, который принимает эти два действия как поля.

Второй – использование интерфейсов.

Третий заключается в том, чтобы переосмыслить ваш дизайн: имеет ли смысл, чтобы класс Preferences был как PreferenceActivity и AbstractBillingActivity ?

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

Java 1.8 (а также Groovy и Scala) имеет свойство « Интерфейсные методы защиты », которые являются интерфейсами с заранее определенными телами метода по умолчанию. Путем внедрения нескольких интерфейсов, которые используют методы защиты, вы можете эффективно, в некотором роде, расширить поведение двух объектов интерфейса.

Кроме того, в Groovy, используя аннотацию @Delegate, вы можете расширить поведение двух или более классов (с оговорками, когда эти классы содержат методы с тем же именем). Этот код доказывает это:

 class Photo { int width int height } class Selection { @Delegate Photo photo String title String caption } def photo = new Photo(width: 640, height: 480) def selection = new Selection(title: "Groovy", caption: "Groovy", photo: photo) assert selection.title == "Groovy" assert selection.caption == "Groovy" assert selection.width == 640 assert selection.height == 480 

Нет, вы не можете сделать класс доступным для двух классов.

Возможное решение состоит в том, чтобы заставить его перейти из другого класса и снова сделать этот класс другим.

Другим решением является создание частного внутреннего класса, который расширяет второй класс. Например, класс, который расширяет JMenuItem и AbstractAction :

 public class MyClass extends JMenuItem { private class MyAction extends AbstractAction { // This class can access everything from its parent... } } 

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

Самое простое решение – создать интерфейс для AbstractBillingActivity и PreferenceActivity и реализовать их оба.

То, о чем вы спрашиваете, это множественное наследование, и это очень проблематично по ряду причин. Множественное наследование было специально предотвращено на Java; Вместо этого был сделан выбор для поддержки реализации нескольких интерфейсов, что является подходящим решением.

Java не поддерживает множественное наследование, поэтому вы не можете продлить класс из двух разных классов одновременно.

Скорее, используйте один класс для расширения и использования interfaces для включения дополнительных функций.