Java接口如何模拟多重继承?

我正在阅读“The Java Tutorial”(第二次)。 我刚刚完成了关于Interfaces的一节,但仍不明白Java接口如何模拟多重继承。 有没有比书中的内容更清晰的解释?


假设你的域中有两种东西:卡车和厨房

卡车有一个driveTo()方法和Kitchens一个cook()方法。

现在假设泡利决定从货车背面卖掉比萨饼。 他想要一个他可以开车去()和做饭()的东西。

在C ++中,他会使用多重继承来做到这一点。

在Java中被认为太危险了,所以你可以继承一个主类,但是你可以从接口继承行为,这些接口是用于所有意图和目的的抽象类,没有字段或方法实现。

所以在Java中,我们倾向于使用委托实现多重继承:

泡利将一辆卡车分成一小部分,并在一个名为厨房的成员变量中为卡车增加了一个厨房。 他通过调用kitchen.cook()来实现Kitchen界面。

class PizzaTruck extends Truck implements Kitchen {
   Kitchen kitchen;

   public void cook(Food foodItem) {
      kitchen.cook(foodItem);
   }
}

他是一个快乐的人,因为他现在可以做这样的事情;

pizzaTruck.driveTo(beach);
pizzaTruck.cook(pizzaWithExtraAnchovies);

好吧,这个愚蠢的故事是为了说明它不是多重继承的模拟,它是真正的多重继承,但条件是只能继承契约,只能从被称为接口的空抽象基类继承。

(更新:随着缺省方法的出现,接口现在也可以提供一些被继承的行为)


您可能会感到困惑,因为您在本地查看多个继承,就一个类继承多个父代的实现细节而言。 这在Java中是不可能的(并且通常会导致在可能的语言中滥用)。

接口允许类型的多重继承,例如一class Waterfowl extends Bird implements Swimmer可以被其他类使用,就好像它是Bird ,就好像它是一个Swimmer 。 这是多重继承的更深层含义:允许一个对象像它一样属于几个不相关的不同类。


这是通过java中的接口实现多重继承的一种方法。

要实现什么?
A类扩展B,C //这在Java中不可能直接使用,但可以间接实现。

class B{
   public void getValueB(){}
}

class C{
   public void getValueC(){}
}


interface cInterface{
   public getValueC();
}

class cChild extends C implemets cInterface{
    public getValueC(){

      // implementation goes here, call the super class's getValueC();

    }
}


// Below code is **like** class A extends B, C 
class A extends B implements cInterface{
   cInterface child =  new cChild();
   child.getValueC();
}
链接地址: http://www.djcxy.com/p/53939.html

上一篇: How do Java Interfaces simulate multiple inheritance?

下一篇: Which class design is better?