あなたはこのようなことを考えていますか?
カークラス:
public class Car{
private int yearOfManufacture;
private String brand;
private String model;
private Engine engine;
public Car(String pBrand, String pModel, int pYearOfManufacture, Engine pEngine){
this.yearOfManufacture = pYearOfManufacture;
this.brand = pBrand;
this.model = pModel;
this.engine = pEngine;
}
}
エンジンクラス:
public class Engine {
private int power;
private int emission;
public Engine(int power, int emission) {
this.power = power;
this.emission = emission;
}
}
ICエンジンクラス:
public class ICEngine extends Engine {
private int numOfValves;
public ICEngine(int power, int emission, int numOfValves) {
super(int power, int emission);
this.numOfValves = numOfValves;
}
}
電気エンジンクラス:
public class ElectricEngine extends Engine {
private int wattage;
public ICEngine(int power, int emission, int wattage) {
super(int power, int emission);
this.wattage = wattage;
}
}
タクシークラス:
public class Taxi extends Car{
private String driverName;
public Taxi(String driverName, String pBrand, String pModel, int pYearOfManufacture, Engine engine){
super(pBrand, pModel, pYearOfManufacture, engine);
this.driverName = driverName;
}
}
専用車クラス:
public class PrivateCar extends Car {
private String ownerName;
public PrivateCar(String ownerName, String pBrand, String pModel, int pYearOfManufacture, Engine engine) {
super(pBrand, pModel, pYearOfManufacture, engine);
this.ownerName = ownerName;
}
}
はアプリケーションクラスの消費:
public class MyApp {
public static void main(String[] args) {
Engine eEngine1 = new ElectricEngine(100, 10, 10000);
Car myElectricTaxi = new Taxi("Driver1", "Honda", "Accord", 2013, eEngine1);
Engine icEngine1 = new ICEngine(100, 10, 6);
Car myICTaxi = new Taxi("Driver2", "Honda", "Accord", 2013, icEngine1);
Engine eEngine2 = new ElectricEngine(100, 10, 10000);
Car myElectricPrivateCar = new PrivateCar("Owner1", "Honda", "Accord", 2013, eEngine2);
Engine icEngine2 = new ICEngine(100, 10, 4);
Car myICPrivateCar = new PrivateCar("Owner2", "Honda", "Accord", 2013, icEngine2);
}
}
あなたのクラス階層を描画する前に、それはとして意味を作ることができるかを決定しますので、また、あなたはこれらのオブジェクトは、* *何をしたいのかを明確インタフェースまたは抽象クラス、およびそれらの関係がどのようなものであるべきかを示します。 たとえば、タクシーにはプライベートとは異なる方法がありますか? – Lagerbaer
良い点。プライベートとタクシーでは共有しない方法がいくつかあり、電気タクシーはElectric、Carからすべてのメソッドを継承する必要があります。タクシーはFossilでもかまいません。その場合、すべてのFossilメソッドを継承する必要があり、Electricメソッドは継承する必要はありません。 ElectricとFossilの一般的な方法はCarにあります。 – user2005142
エンジンタイプを別のクラスに分けて、それを使用してカスタムタイプを作成することができます。 'タクシーcab1 =新しいタクシー(新しいElectricMotor());'。 – shmosel