Мой класс должен расширить два класса одновременно:
public class Preferences extends AbstractBillingActivity {
public class Preferences extends PreferenceActivity {
Как сделать так?
Upd. Так как это не возможно, как я должен использовать тот AbstractBillingActivity с Предпочтениями затем?
Upd2. Если я иду с интерфейсами, должен я создавать:
BillingInterface
public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity {
}
PreferenceActivity
public interface PreferenceActivity {
}
AbstractBillingActivity
public interface AbstractBillingActivity {
void onCreate(Bundle savedInstanceState);
}
и затем
public class Preferences implements BillingInterface {
Я могу думать об обходном решении, которое может помочь, если классы, которые Вы хотите расширить, включают только методы.
Запись эти классы как интерфейсы. В Java Вы можете реализовывать любое количество интерфейсов и реализовывать методы как методы по умолчанию в интерфейсах.
Кроме того, вместо внутренних классов можно использовать 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
}
Если Вы интересуетесь использованием методов от нескольких классов, лучший способ приблизиться к нему состоит в том, чтобы использовать Состав вместо Inheritence
В 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
Только для указания, не точно то же как расширение двух классов, но в некоторых случаях (как вышеупомянутый пример), это может решить ситуацию. Я настоятельно рекомендую проанализировать Ваш дизайн перед вскакиванием в использование черт, обычно они не требуются, и Вы не сможете приятно реализовать наследование (например, Вы не можете использовать защищенные методы в чертах). Следуйте рекомендации принятого ответа, если это возможно.