从两个类扩展

问题

我怎样才能做到这一点:

public class Main extends ListActivity , ControlMenu

此外,我想知道这种方法是可以的,我已经在课程中制作了ControlMenu的菜单,我正在其余的活动中进行扩展。


#1 热门回答(138 赞)

你只能扩展单个班级。并从许多来源实现接口。

无法扩展多个类。我能想到的唯一解决方案是不继承任何一个类,而是通过将对象的请求重定向到你希望它们转到的对象来获得每个类的内部变量并执行更多代理。

public class CustomActivity extends Activity {

     private AnotherClass mClass;

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mClass = new AnotherClass(this);
     }

     //Implement each method you want to use.
     public String getInfoFromOtherClass()
     {
        return mClass.getInfoFromOtherClass();
     }
 }

这是我提出的最佳解决方案。你可以从两个类中获取功能,但实际上只有一个类类型。

缺点是你不能使用演员表适合内部类的模具。


#2 热门回答(47 赞)

为什么不使用内部类(嵌套)

class A extends B {
    private class C extends D {
        //Classes A , B , C , D accessible here 
    }
}

#3 热门回答(37 赞)

你将需要使用接口。通常,由于钻石问题,多重继承是不好的:

abstract class A {
 abstract string foo();
}

class B extends A {
 string foo () { return "bar"; }
}

class C extends A  {
 string foo() {return "baz"; }
}

class D extends B, C {
 string foo() { return super.foo(); } //What do I do? Which method should I call?
}

C和其他人有几种方法来解决这个问题,例如

string foo() { return B::foo(); }

但Java只使用接口。

Java Trails对接口进行了很好的介绍:http://download.oracle.com/javase/tutorial/java/concepts/interface.html你可能希望在深入了解Android API的细微差别之前遵循这一点。