我的班级应该同时扩展两个班级:
public class Preferences extends AbstractBillingActivity {
public class Preferences extends PreferenceActivity {
怎么办?
UPD。由于这是不可能的,那么我应该如何在首选项中使用AbstractBillingActivity呢?
UPD2。如果我使用接口,我应该创建:
public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity {
}
public interface PreferenceActivity {
}
public interface AbstractBillingActivity {
void onCreate(Bundle savedInstanceState);
}
然后
public class Preferences implements BillingInterface {
Java不支持多重继承。
我可以想到一些解决方法:
第一个是聚合:创建一个将这两个活动作为字段的类。
第二是使用接口。
第三是重新考虑你的设计:Preferences
类是PreferenceActivity
还是AbstractBillingActivity
才有意义吗?
如果要扩展的类只包含方法,我可以想到一个可以帮助的解决方法。
将这些类写为接口。在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用作Phone类的字段,例如
class Phone {
DeviceInfo info;
String phoneNumber;
Stryng phoneType;
//sets; gets
}
如果您对使用多个类的方法感兴趣,那么接近它的最佳方法是使用Composition而不是Inheritence
Java不支持多重继承。您可以实现多个接口,但不能扩展多个类。
另一个解决方案是创建一个扩展第二个类的私有内部类。例如,扩展JMenuItem
和AbstractAction
的类:
public class MyClass extends JMenuItem {
private class MyAction extends AbstractAction {
// This class can access everything from its parent...
}
}
Java 1.8(以及Groovy和Scala)有一个名为“Interface Defender Methods”的东西,它是与预定义的默认方法体的接口。通过实现使用defender方法的多个接口,您可以在某种程度上有效地扩展两个接口对象的行为。
此外,在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
不,你不能让一个类扩展到两个类。
一种可能的解决方案是使其从另一个类扩展,并使该类再次从另一个类扩展。
Java不支持多重继承。但是,使用接口可以解决您的问题。
最简单的解决方案是为AbstractBillingActivity
和PreferenceActivity
and创建一个接口来实现它们。
您要问的是多重继承,并且由于多种原因而存在问题。在Java中特别避免了多重继承;选择是为了支持多个接口实现,相反,这是适当的解决方法。
Java不支持多重继承,这就是为什么你不能同时从两个不同的类扩展一个类的原因。
相反,使用单个类来扩展,并使用interfaces
来包含其他功能。
熟悉多级层次结构?
您可以将子类用作另一个类的超类。
你可以试试这个。
public class PreferenceActivity extends AbstractBillingActivity {}
然后
public class Preferences extends PreferenceActivity {}
在这种情况下,Preferences类也继承了PreferencesActivity和AbstractBillingActivity。