抽象クラス内のオブジェクトを作成するための最良の方法は何ですか?

aviv.L:

ビルド色と抽象クラス内のロケーションオブジェクト、およびへの最善のアプローチは何である理由は

アプローチ1

public abstract class Vehicle {
    private int vehicleId;
    private Color color; // color Object
    private Location location; // location Object

    public Vehicle() {
        color = new Color();
        location = new Location();
    }
}

public class Car extends Vehicle {
    private String type;

    public Car() {
        super();    
    }
}

アプローチ2

public abstract class Vehicle {
    private int vehicleId;
    protected Color color; // color Object
    protected Location location; // location Object

    public Vehicle(){}
}

public class Car extends Vehicle {
    private String type;

    public Car(){
        super();
        super.location = new Location();
        super.color = new Color();    
    }
}
Themelis:

2 aproachesの違いは最初のものであることが抽象クラスでその状態をインスタンス化しますすべての相続は、その状態を継承しますので(ただしそのため、それにアクセスすることはできませんprivateし、ありませんprotected)。

第2のアプローチでは、オブジェクトの状態が取得された相続のコンストラクタ内で初期化し、おそらくあなたは、強制された宣言することcolorlocationとしてprotected、あなたがその状態にアクセスすることができないであろうからです。

どちらのアプローチが良いですか?それは依存...あなたはすべての子供が共通の状態、最初のものを継承します。あなたはすべての子供が自身の状態、二を定義したい場合。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=394204&siteId=1