一类可以扩展两个类吗?
我的class级应该同时扩展两个class级:
public class Preferences extends AbstractBillingActivity { public class Preferences extends PreferenceActivity {
怎么做?
更新 由于这是不可能的,我应该如何使用AbstractBillingActivity与首选项呢?
Upd2 。 如果我使用接口,我应该创build:
-
BillingInterface
public interface BillingInterface extends PreferenceActivity, AbstractBillingActivity { }
-
PreferenceActivity
public interface PreferenceActivity { }
-
AbstractBillingActivity
public interface AbstractBillingActivity { void onCreate(Bundle savedInstanceState); }
接着
public class Preferences implements BillingInterface {
Java不支持多重inheritance。
我可以想到几个解决方法:
第一个是聚合:创build一个以这两个活动为字段的类。
第二个是使用接口。
第三个是重新考虑你的devise: Preferences
类是否既是PreferenceActivity
又是AbstractBillingActivity
?
Java不支持多重inheritance。 您可以实现多个接口,但不能扩展多个类。
Java 1.8(以及Groovy和Scala)有一个名为“ Interface Defender Methods ”的东西,它是与预定义的默认方法体的接口。 通过实现多个使用defender方法的接口,可以有效地扩展两个接口对象的行为。
此外,在Groovy中,使用@Delegate注释,可以扩展两个或更多类的行为(当这些类包含相同名称的方法时,需要注意)。 这段代码certificate了这一点:
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
另一个解决scheme是创build一个扩展第二个类的私有内部类。 例如一个扩展JMenuItem
和AbstractAction
:
public class MyClass extends JMenuItem { private class MyAction extends AbstractAction { // This class can access everything from its parent... } }
不,你不能把课程扩展到两个class级。
一个可能的解决scheme是使其从另一个类扩展,并使该类再次从另一个类延伸。
你所问的是多重inheritance,由于多种原因,这是非常有问题的。 Java中特别避免了多重inheritance; 所做的select是支持多接口的实现,相反,这是适当的解决方法。
Java不支持多重inheritance。 但是,您的问题可能会使用接口来解决。
最简单的解决scheme是为AbstractBillingActivity
和PreferenceActivity
创build一个接口,并同时实现它们。
Java不支持多重inheritance,这就是为什么你不能同时从两个不同的类中扩展一个类。
而是使用单个类来扩展和使用interfaces
来包含附加function。