2017-01-26 6 views
3

私は最近OOPを手に入れています。これは非常に混乱しています。 スーパークラスのCar、Electric、Fossil車をサブクラスとして作りたいです。親 - 車。サブクラス:電気または化石。子供:自家用車またはタクシー

`abstract class Electric extends Car`. 

問題は、プライベートかタクシーのどちらかのインスタンスのみを作成したいということです。私は理想的

Taxi cab1 = new Fossil() 

私は、これは明白な答えと質問です実感として声明を作るために許されるように、どのように私は、これを構造化することができますが、私の目が痛くなったまでジェネリック医薬品とのインターフェースを見た後、欲求不満は高まっています。

私が知っている、忘れてしまったように、これがどのように行われるかを誰かに思い出させることができたら大いに感謝します。

+1

あなたのクラス階層を描画する前に、それはとして意味を作ることができるかを決定しますので、また、あなたはこれらのオブジェクトは、* *何をしたいのかを明確インタフェースまたは抽象クラス、およびそれらの関係がどのようなものであるべきかを示します。 たとえば、タクシーにはプライベートとは異なる方法がありますか? – Lagerbaer

+0

良い点。プライベートとタクシーでは共有しない方法がいくつかあり、電気タクシーはElectric、Carからすべてのメソッドを継承する必要があります。タクシーはFossilでもかまいません。その場合、すべてのFossilメソッドを継承する必要があり、Electricメソッドは継承する必要はありません。 ElectricとFossilの一般的な方法はCarにあります。 – user2005142

+2

エンジンタイプを別のクラスに分けて、それを使用してカスタムタイプを作成することができます。 'タクシーcab1 =新しいタクシー(新しいElectricMotor());'。 – shmosel

答えて

0

カークラス:

public class Car{ 

private int yearOfManufacture; 
private String brand; 
private String model; 

private boolean forRent; 


public Car(String pBrand, String pModel, int pYearOfManufacture, boolean pForRent){ 
    this.yearOfManufacture = pYearOfManufacture; 
    this.brand = pBrand; 
    this.model = pModel; 
    this.forRent = pForRent; 
} 


public boolean isPrivate(){ 
    return (!forRent); 
} 

public int getYear()     
    { 
     return this.yearOfManufacture; 
    } 

public String getBrand() 
    { 
     return this.brand; 
    } 

public void setYear(int year) 
    { 
     this.yearOfManufacture = year; 
    } 

public void setBrand(String carBrand) 
    { 
     this.brand = carBrand; 
    } 

public void setModel(String model)       
    { 
     this.model = model; 

public String getModel() 
    { 
     return this.model; 
    } 

} 

電気自動車クラス:

public class ElectricCar extends Car{ 

    private int electricPowerOutput; 

    public ElectricCar(String pBrand, String pModel, int pYearOfManufacture, int pElectricPowerOutput, boolean pForRent){ 
     super(pBrand,pModel,pYearOfManufacture,pForRent); 
     this.electricPowerOutput = pElectricPowerOutput; 
    } 

    public int getElectricPowerOutput(){ 
     return this.electricPowerOutput; 
    } 

    public void setElectricPowerOutput(int electricPower){ 
     this.electricPowerOutput = electricPower; 
    } 

} 

化石車:

public class FossilCar extends Car{ 

    private int emissionRating; 

    public ElectricCar(String pBrand, String pModel, int pYearOfManufacture, int pEmissionRating, boolean pForRent){ 
     super(pBrand,pModel,pYearOfManufacture,pForRent); 
     this.emissionRating = pEmissionRating; 
    } 

    public int getEmissionRating(){ 
     return this.emissionRating; 
    } 

    public void setElectricPowerOutput(int emissionRating){ 
     this.emissionRating = emissionRating; 
    } 

} 

これが役立ちますように!

+0

ありがとうございました。これは問題ではありません。私が持っていた問題は、タクシーをCarを拡張する化石にタイプキャストしようとしていたことでした。 – user2005142

1

あなたはこのようなことを考えていますか?

カークラス:

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); 

} 

} 
関連する問題