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

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

public class Preferences extends AbstractBillingActivity {

public class Preferences extends PreferenceActivity {

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

Upd. Так как это не возможно, как я должен использовать тот AbstractBillingActivity с Предпочтениями затем?

Upd2. Если я иду с интерфейсами, должен я создавать:

  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 {

60
задан 6 July 2011 в 00:44

4 ответа

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

Запись эти классы как интерфейсы. В Java Вы можете реализовывать любое количество интерфейсов и реализовывать методы как методы по умолчанию в интерфейсах.

https://www.geeksforgeeks.org/default-methods-java /

0
ответ дан 1 November 2019 в 10:24

Кроме того, вместо внутренних классов можно использовать 2 или больше класса в качестве полей.

, Например:

Class Man{
private Phone ownPhone;
private DeviceInfo info;
//sets; gets
}
Class Phone{
private String phoneType;
private Long phoneNumber;
//sets; gets
}

Class DeviceInfo{

String phoneModel;
String cellPhoneOs;
String osVersion;
String phoneRam;
//sets; gets

}

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

кроме того, это возможно, лучше использовать DeviceInfo в качестве поля в Телефонный класс, как

class Phone {
DeviceInfo info;
String phoneNumber;
Stryng phoneType;
//sets; gets
}
0
ответ дан 1 November 2019 в 10:24

Если Вы интересуетесь использованием методов от нескольких классов, лучший способ приблизиться к нему состоит в том, чтобы использовать Состав вместо Inheritence

0
ответ дан 1 November 2019 в 10:24

В Groovy можно использовать черта вместо класса. Поскольку они действуют подобные абстрактным классам (в способе, которым можно указать абстрактные методы, но можно все еще реализовать других), можно сделать что-то как:

trait EmployeeTrait {
    int getId() {
         return 1000 //Default value
    }
    abstract String getName() //Required
}

trait CustomerTrait {
    String getCompany() {
        return "Internal" // Default value
    }
    abstract String getAddress()
}

class InternalCustomer implements EmployeeTrait, CustomerTrait {
    String getName() { ... }
    String getAddress() { ... }
}

def internalCustomer = new InternalCustomer()
println internalCustomer.id // 1000
println internalCustomer.company //Internal

Только для указания, не точно то же как расширение двух классов, но в некоторых случаях (как вышеупомянутый пример), это может решить ситуацию. Я настоятельно рекомендую проанализировать Ваш дизайн перед вскакиванием в использование черт, обычно они не требуются, и Вы не сможете приятно реализовать наследование (например, Вы не можете использовать защищенные методы в чертах). Следуйте рекомендации принятого ответа, если это возможно.

0
ответ дан 1 November 2019 в 10:24

Другие вопросы по тегам:

Похожие вопросы: