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

关于Java多重继承

关于Java多重继承

PIPIONE 2019-10-16 13:09:07
Java多重继承为了充分理解如何解决Java的多重继承问题,我有一个需要澄清的经典问题。让我说我有课Animal它有子类Bird和Horse我需要上一堂课Pegasus从Bird和Horse自Pegasus是一只鸟和一匹马。我认为这是典型的钻石问题。据我所知,解决这个问题的经典方法是Animal, Bird和Horse类接口和实现Pegasus从他们那里。我想知道是否有另外一种方法可以解决我仍然可以为鸟类和马匹创造物体的问题。如果有一种方法也能创造动物,那将是伟大的,但不是必要的。
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

将对象组合在一起有两种基本方法:

  • 第一个是

    继承

    ..正如您已经确定的那样,继承的局限性意味着您不能在这里做您需要的事情。
  • 二是

    构图

    ..由于继承失败,您需要使用组合。

它的工作方式是你有一个动物物体。然后在该对象中添加进一步的对象,这些对象提供所需的属性和行为。

例如:

  • 延展

    动物

    实施器

    IFIER

  • 延展

    动物

    实施器

    伊赫比沃尔

  • 飞马

    延展

    动物

    实施器

    Iherbivore,IQuadrued,IFlier

现在IFlier就像这样:

 interface IFlier {
     Flier getFlier();
 }

所以Bird看起来是这样的:

 class Bird extends Animal implements IFlier {
      Flier flier = new Flier();
      public Flier getFlier() { return flier; }
 }

现在,您拥有了继承的所有优点。你可以重复使用代码。您可以拥有一组IFliers,并且可以使用多态性的所有其他优点,等等。

然而,你也有所有的灵活性,从组成。您可以根据自己的喜好将不同的接口和复合支持类应用于每种类型的Animal-尽可能多地控制每一个位是如何设置的。

组合的策略模式替代方法

取决于您所做的内容和方式的另一种方法是将Animal基类包含一个内部集合,以保留不同行为的列表。在这种情况下,您最终会使用更接近策略模式的东西。这确实在简化代码方面具有优势(例如Horse不需要知道任何关于QuadrupedHerbivore)但如果不采用接口方法,则会失去多态的许多优点,等等。



查看完整回答
反对 回复 2019-10-17
  • 2 回答
  • 0 关注
  • 454 浏览

添加回答

举报

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