为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐4208626 2019-10-24 14:19:14
我正在阅读“ Java教程”(第2次)。我刚读完有关接口的部分,但仍然不了解Java接口如何模拟多重继承。有比书中更清楚的解释吗?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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


卡车具有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);

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



查看完整回答
反对 回复 2019-10-24
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2019-10-24
?
月关宝盒

TA贡献1772条经验 获得超5个赞

这是一种通过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();

}


查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 895 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信