多重继承,在Java中使用接口与使用组合



基于一些stackoverflow帖子:

Java不支持多重继承。

我能想到几个解决办法:

第一个是作文:制作一个将这两个活动作为字段的类。

二是使用接口。//这是我的问题

我尝试通过接口或组合构建一个可以具有AA类的方法和BB类的方法的类。我读了很多关于继承与组合的文章,但我的问题是接口与组合(哪一个更好)。如果我想在单个类中使用这两个类方法Preference,

class AA{
public int id(){
return 0;
}
}
class BB{
public String name(){
return "0";
}
}

显然,Java不支持多重继承,我们需要使用接口或组合。

接口:

首先构造对应于这两个类的接口:

interface AAInterface{
public int id();
}
interface BBInterface{
public String name();
}

然后构造一个实现这两个接口的Preference类,并在该类中声明两个类对象:

class Preference implements AAInterface, BBInterface{
AA aa; 
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}

组合:直接构造一个类,该类具有与两个类对象相对应的两个字段,以便使用它们的方法。

class Preference{
AA aa; 
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}

因此,在Preference类中,通过使用其他接口或组合方法,我可以使用从AA类和BB类派生的id()方法和name()方法。

问题:既然组合更简单更好,为什么我们要使用接口?我们有什么理由应该使用接口而不是组合吗?换句话说,如何使用java接口在一个类中获得两个类方法,我的方法是正确的吗?

接口与继承行为无关。如果你想让其他人知道你的类有什么能力,而不是教你的类如何做事,那么就让你的类实现一个接口。

如果某个库可以对具有getName()方法的对象做一些有趣的事情,那么你不能指望它知道世界上所有具有该方法的类,但你可以让你的类实现一个库知道的接口(比如Named),该接口强制该方法存在。

从您的角度来看,它不会对您的类进行太多修改,而且您的对象可能仍然与其他Named对象有很大不同。从该库的角度来看,它使您的对象可用。

详细说明:如果你只需要访问其他类中已经存在的特定方法,这就足够了:

class Preference{
AA aa; 
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}

你的对象会知道如何说出它的名称和id(或者会吗?这毕竟不是你对象的名字:)。但除其他外,您将无法将其添加到AA、BB、AAInterfaces或BBInterfaces的集合中。他们都不是。它只是表现得像他们。根据需要,这可能不够,也可能不够。

最新更新