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

杰克纳德:

我正在阅读“ Java教程”(第2次)。我刚读完有关接口的部分,但仍然不了解Java接口如何模拟多重继承。有比书中更清楚的解释吗?

彼得·提勒曼斯(Peter Tillemans):

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

卡车有driveTo()方法,而Kitchens有cook()方法。

现在,假设Pauli决定从送货卡车的后面出售比萨饼。他想要一种可以与drive()和cook()一起使用的东西。

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

在Java中,这被认为过于危险,因此您可以从主类继承,但是可以从接口“继承”行为,这些行为对于所有意图和目的都是抽象类,没有字段或方法实现。

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

Pauli对卡车进行了子类化,并在名为“厨房”的成员变量中为卡车添加了厨房。他通过调用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);

好的,这个愚蠢的故事是要指出它不是多重继承的模拟,它是真正的多重继承,但前提是您只能继承协定,只能从称为接口的空抽象基类继承。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章