私はちょうどあなたのコードを通過し、上から下にコメントします。 一般的な注意点は、Javaコード規約に従うことです。
あなたのインターフェイスは、次のような細かいですが、セッターが値を返さないことを命名し、大会は、それあなたが同様に負荷の車両へのインタフェースで投げるかもしれない
interface Passengers {
void setPassengers(int count);
int getPassengers();
}
ます。
interface LoadVehicle {
int getCapacity();
int getAxes();
int getRounds(); // what is this anyway?
}
このインターフェイスにはセッターはありません。これらの項目は変更されません(下記のGhostCatのコメントcfg)。
Vehicleクラスはマーカーインターフェイス(「マーカー」は単に車両であることを示していますが、メソッドを定義していないということを意味します)でもかまいません。
interface Vehicle {}
(これは、他の2つのインターフェイスがinterface Passengers extends Vehicle
とinterface LoadVehicle extends Vehicle
のように、それを拡張することができます)。
Autoクラスには必要なコンストラクタがありません。 すべての自動車に乗客がいるわけではないので、そのインターフェースを実装する必要はありません。
CompactCarクラスとLuxuryCarクラスの作成には、区別がないように見えません。一般的なクラスがそれを行う必要があります。
class PassengerCar extends Car implements Passengers {
// add getter and setter for this to implement the interface
private int passengers;
PassengerCar(String brand, int year, int engNum, double price) {
super(brand, year, engNum, price);
}
}
この場合、LuxuryCarsまたはCompactsを作成することができます。
同じように、トラック用の車を作成できるようになりました。
class LoadCar extends Car implements LoadVehicle {
// again, getters for these for the interface
private int capacity, axes, rounds;
// and constructor
LoadCar(String brand, int year, int engNum, double price,
int cap, int axCount, int roundCount) {
super(brand, year, engNum, price);
// assigs the other parameters to variables
}
}
他の区別がない場合、トラックはLoadCarとして作成することができます。
ワゴンの場合、ワゴンクラスには必要なロード機能がありません。 LoadCarまたはPassengerCarをサブクラス化するかどうかを決定する必要があります。結局のところ、それは両方です。どちらの場合でも、もう一方の欠落したインターフェースを実装する必要があります。 乗客インターフェイスは簡単ですので、私はこれでいいと思う:
class Wagon extends LoadCar implements Passengers {
// again, getter and setter for this for the interface
private int passengers;
Wagon(String brand, int year, int engNum, double price,
int cap, int axCount, int roundCount) {
super(brand, year, engNum, price, cap, axCount, roundCount);
}
あなたはこれらのクラスを使用すると思いますするシステムでは、あなただけで作業をすると思いますので、それは本当に問題で拡張するためにどのませんインタフェース。
EDIT: だからここにあなたがあなたのオブジェクトを作成します方法は次のとおりです。
// create a luxury car
PassengerCar luxuryCar = new PassengerCar("BMW", 2017, 322131, 49_999.99);
// create a compact
PassengerCar compactCar = new PassengerCar("Smart", 2014, 55231, 25_999.99);
// create a truck
LoadCar truck = new LoadCar("Mercedes", 2014, 2113321, 99_999.99, 10_000, 6, 4);
// create a wagon
Wagon wagon = new Wagon("Dodge", 2005, 551223, 19_999.99, 3_000, 6, 4);
そしておそらくこの継承の効果を示すために:
ちなみに
List<Vehicles> vehicles = new ArrayList<>();
List<Passenger> passengerVehicles = new ArrayList<>();
List<LoadCar> loadVehicles = new ArrayList<>();
// everything is a vehicle:
vehicles.add(luxuryCar); // fine
vehicles.add(compactCar); // fine
vehicles.add(truck); // fine
vehicles.add(wagon); // fine
// you can only add passenger vehicles the the passenger car list:
passengerVehicles.add(luxuryCar); // fine
passengerVehicles.add(compactCar); // fine
passengerVehicles.add(wagon); // fine
passengerVehicles.add(truck); // NO! a truck is not a passenger car.
// you can only add load cars to the load car list:
loadVehicles.add(luxuryCar); // NO! a PassengerCar is not a LoadCar.
loadVehicles.add(compactCar); // NO, same reason
loadVehicles.add(wagon); // fine
loadVehicles.add(truck); // fine
、ここに別のリストがあります:
List<Car> cars = new ArrayList<>();
// everything is a car:
cars.add(luxuryCar); // fine
cars.add(compactCar); // fine
cars.add(truck); // fine
cars.add(wagon); // fine
車と車の区別のポイントは何ですか? ボートの販売を開始するとしましょう...
class Boat implements Vehicle, Passenger {
// add getter/setter
private int passengers;
public Boat(int keelDepth) {
}
}
これは意味します:
は、あなたの質問やコードをフォーマットするための時間がかかるしてください。あなたの課題のルーブリックはブロック引用符で囲まれていなければなりません(行頭に '>'を使い、 '*'を使って項目のリストを表示してください)あなたのコードも正しく字下げする必要があります。 。 –
大丈夫次回は@Andy – Michelle
を考慮に入れます。さらに重要なのは、Java命名規約に従ってください!メソッド名**は大文字で始まらないでください。 –