一个类可以扩展两个类吗?

问题描述 投票:57回答:12

我的班级应该同时扩展两个班级:

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 {
java android multiple-inheritance
12个回答
47
投票

Java不支持多重继承。

我可以想到一些解决方法:

第一个是聚合:创建一个将这两个活动作为字段的类。

第二是使用接口。

第三是重新考虑你的设计:Preferences类是PreferenceActivity还是AbstractBillingActivity才有意义吗?


0
投票

如果要扩展的类只包含方法,我可以想到一个可以帮助的解决方法。

将这些类写为接口。在Java中,您可以实现任意数量的接口,并将这些方法实现为接口中的默认方法。

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


0
投票

此外,您可以使用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
}

0
投票

如果您对使用多个类的方法感兴趣,那么接近它的最佳方法是使用Composition而不是Inheritence


23
投票

Java不支持多重继承。您可以实现多个接口,但不能扩展多个类。


12
投票

另一个解决方案是创建一个扩展第二个类的私有内部类。例如,扩展JMenuItemAbstractAction的类:

public class MyClass extends JMenuItem {


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

}

9
投票

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

4
投票

不,你不能让一个类扩展到两个类。

一种可能的解决方案是使其从另一个类扩展,并使该类再次从另一个类扩展。


2
投票

Java不支持多重继承。但是,使用接口可以解决您的问题。

最简单的解决方案是为AbstractBillingActivityPreferenceActivityand创建一个接口来实现它们。


1
投票

您要问的是多重继承,并且由于多种原因而存在问题。在Java中特别避免了多重继承;选择是为了支持多个接口实现,相反,这是适当的解决方法。


0
投票

Java不支持多重继承,这就是为什么你不能同时从两个不同的类扩展一个类的原因。

相反,使用单个类来扩展,并使用interfaces来包含其他功能。


0
投票

熟悉多级层次结构?

您可以将子类用作另一个类的超类。

你可以试试这个。

public class PreferenceActivity extends AbstractBillingActivity {}

然后

public class Preferences extends PreferenceActivity {}

在这种情况下,Preferences类也继承了PreferencesActivity和AbstractBillingActivity。

© www.soinside.com 2019 - 2024. All rights reserved.