Java 如何构建两级继承层次结构?
我假设一个具有多个继承层次结构的类可以分解为: 假设一类飞机有4种组合: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 }
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
}
你的方法是什么?方法做点什么。它们不表示继承层次结构。它们可能是工厂方法,但您的方法不返回任何内容。您的方法做什么?方法做点什么。它们不表示继承层次结构。它们可能是工厂方法,但您的方法不会返回任何内容。