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.如果我使用接口,我应该创建:
BillingInterface
public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity {
}
Run Code Online (Sandbox Code Playgroud)PreferenceActivity
public interface PreferenceActivity {
}
Run Code Online (Sandbox Code Playgroud)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?
Jon*_*kus 15
另一个解决方案是创建一个扩展第二个类的私有内部类.例如,扩展的类JMenuItem和AbstractAction:
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)