Java 如何构建两级继承层次结构?

Java 如何构建两级继承层次结构?,java,oop,design-patterns,Java,Oop,Design Patterns,我假设一个具有多个继承层次结构的类可以分解为: 假设一类飞机有4种组合: 1. Subsonic & commercial 2. Subsonic & jet fighter 3. Supersonic & commercial 4. Supersonic & jet fighter 现在我的非面向对象类如下所示 Class Airplane { Void SubsonicAndCommercial { print }

我假设一个具有多个继承层次结构的类可以分解为: 假设一类飞机有4种组合:

1.  Subsonic & commercial
2.  Subsonic & jet fighter
3.  Supersonic & commercial
4.  Supersonic & jet fighter
现在我的非面向对象类如下所示

Class Airplane {

   Void SubsonicAndCommercial {
       print
    }

    void subsonicAndJet  {

   }

  void supersonicAndCommercial {

  }

  void supersonicAndJet {

 }

}
现在我需要将plane类分解为子类。最常见的方法是什么? 这是一个2级的层次结构吗? 即 Iface飞机 Iface亚音速、超音速扩展平面

4-子类喷流扩展超音速,喷流扩展亚音速。。etc

在Java中,类永远不能扩展多个类,因此这看起来像是接口的工作。你应该为亚音速、超音速、商用和战斗机制作接口。然后您可以像这样实现它们

public class SubCommercialPlane implements Subsonic, Commercial


public class SuperCommercialPlane implements Supersonic, Commercial


public class SubFighterPlane implements Subsonic, Fighter


public class SuperCommercialPlane implements Supersonic, Fighter
这可能是通过简单的java层次结构来实现这一点的最佳方法。如果您想以更复杂的方式解决这个问题,请查看实体组件模型,这在这篇wikipedia文章中有很好的解释:


在Java中,类永远不能扩展多个类,因此这看起来像是接口的工作。你应该为亚音速、超音速、商用和战斗机制作接口。然后您可以像这样实现它们

public class SubCommercialPlane implements Subsonic, Commercial


public class SuperCommercialPlane implements Supersonic, Commercial


public class SubFighterPlane implements Subsonic, Fighter


public class SuperCommercialPlane implements Supersonic, Fighter
这可能是通过简单的java层次结构来实现这一点的最佳方法。如果您想以更复杂的方式解决这个问题,请查看实体组件模型,这在这篇wikipedia文章中有很好的解释:

一种方法是定义亚音速、超音速、商用和军用接口。然后定义实现相应接口对的类

这允许您定义方法,例如,接受超音速接口的方法,不管它是商业的还是军事的

您可以定义如下所示的接口:

public interface IAirplane {
   // Method declarations appropriate for all planes.  
}

public interface ISupersonic extends IAirplane {
   // Method declarations specific to Supersonic aircraft.
}
在为亚音速、商用和军用定义类似接口之后,可以定义实现适当接口的类。例如:

public class SupersonicJetFighter implements ISupersonic, IMilitary {
   // Implementations of methods in IAirplane, ISupersonic and IMilitary
}
如果一些代码在多个IAirplane实现之间是通用的,那么可以引入一个抽象类

public abstract class AbstractAirplane implements IAirplane {
   // Common methods.
}

public class SupersonicJetFighter 
extends AbstractAirplane 
implements ISupersonic, IMilitary {
   // Implementations of undefined methods in IAirplane, ISupersonic and IMilitary
}
一种方法是定义亚音速、超音速、商用和军用接口。然后定义实现相应接口对的类

这允许您定义方法,例如,接受超音速接口的方法,不管它是商业的还是军事的

您可以定义如下所示的接口:

public interface IAirplane {
   // Method declarations appropriate for all planes.  
}

public interface ISupersonic extends IAirplane {
   // Method declarations specific to Supersonic aircraft.
}
在为亚音速、商用和军用定义类似接口之后,可以定义实现适当接口的类。例如:

public class SupersonicJetFighter implements ISupersonic, IMilitary {
   // Implementations of methods in IAirplane, ISupersonic and IMilitary
}
如果一些代码在多个IAirplane实现之间是通用的,那么可以引入一个抽象类

public abstract class AbstractAirplane implements IAirplane {
   // Common methods.
}

public class SupersonicJetFighter 
extends AbstractAirplane 
implements ISupersonic, IMilitary {
   // Implementations of undefined methods in IAirplane, ISupersonic and IMilitary
}

你的方法是什么?方法做点什么。它们不表示继承层次结构。它们可能是工厂方法,但您的方法不返回任何内容。您的方法做什么?方法做点什么。它们不表示继承层次结构。它们可能是工厂方法,但您的方法不会返回任何内容。