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

LA_*_*LA_ 60 java android multiple-inheritance

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

public class Preferences extends AbstractBillingActivity {

public class Preferences extends PreferenceActivity {
Run Code Online (Sandbox Code Playgroud)

怎么办?

更新.由于这是不可能的,那么我应该如何将这个AbstractBillingActivity与Preferences一起使用呢?

Upd2.如果我使用接口,我应该创建:

  1. BillingInterface

    public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity {
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. PreferenceActivity

    public interface PreferenceActivity {
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. AbstractBillingActivity

    public interface AbstractBillingActivity {
    
            void onCreate(Bundle savedInstanceState);
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

然后

public class Preferences implements BillingInterface {
Run Code Online (Sandbox Code Playgroud)

Eti*_*tel 52

Java不支持多重继承.

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

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

第二是使用接口.

第三是重新考虑你的设计:一个Preferences班级既是a PreferenceActivity AbstractBillingActivity


Mat*_*Mat 24

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


Jon*_*kus 15

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

public class MyClass extends JMenuItem {


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

}
Run Code Online (Sandbox Code Playgroud)


dja*_*fan 10

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
Run Code Online (Sandbox Code Playgroud)

  • 附录:我撤回了这个答案:我后来了解到,如果您需要类似于多重继承的行为,“对象组合”可能是您想要使用的。此外,实现多个接口不会像多重继承:你不能有一个实现两个接口的类,其中两个接口都包含具有相同签名的默认方法,除非该类为该方法本身提供了实现;因此我们仍然有效地拥有单一继承。一直在学习... (2认同)

Jul*_*les 5

不,您不能使一个类扩展到两个类。

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