猿问

关于Java多重继承

Java多重继承

为了充分理解如何解决Java的多重继承问题,我有一个需要澄清的经典问题。

让我说我有课Animal它有子类BirdHorse我需要上一堂课PegasusBirdHorsePegasus是一只鸟和一匹马。

我认为这是典型的钻石问题。据我所知,解决这个问题的经典方法是AnimalBirdHorse类接口和实现Pegasus从他们那里。

我想知道是否有另外一种方法可以解决我仍然可以为鸟类和马匹创造物体的问题。如果有一种方法也能创造动物,那将是伟大的,但不是必要的。


PIPIONE
浏览 455回答 2
2回答

繁华开满天机

将对象组合在一起有两种基本方法:第一个是继承..正如您已经确定的那样,继承的局限性意味着您不能在这里做您需要的事情。二是构图..由于继承失败,您需要使用组合。它的工作方式是你有一个动物物体。然后在该对象中添加进一步的对象,这些对象提供所需的属性和行为。例如:鸟延展动物实施器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不需要知道任何关于Quadruped或Herbivore)但如果不采用接口方法,则会失去多态的许多优点,等等。
随时随地看视频慕课网APP

相关分类

Java
我要回答