車のレンタルシステムの一環として、大型車と小型車を表すクラスを書く必要があります。違いは、サイズの異なるタンクがあり、燃料消費率が異なることです。現在のところ、私のアプローチは、AbstractCarという抽象クラスによって実装されたインタフェースCarを持ち、それは2つの具象クラスSmallCarとLargeCarによって拡張されています。しかし、これはインターフェイスと抽象クラスを使った初めてのことです(私たちはそれらをクラスでカバーしており、この割り当ては私たちの知識を評価するように設計されています)、どのクラスに何を配置するのかを知るのに困っています。インターフェイスと階層を学習し、特定の変数やメソッドを配置する場所は?
fillメソッドの実装はまったく同じです.FUEL_CAPACITYの正しい値を参照するだけでよいので、これらのメソッドをAbstractCarクラスに実装する必要があると感じますが、次に取得する方法はわかりません正しいFUEL_CAPACITY値を参照するようにします。フィールドfuelLevelも明らかにすべての車に保持されているので、AbstractCarで宣言しなければならないと感じますが、プライバシーを削除せずにサブクラスからアクセスすることはできません。
誰でも私が間違っていることやインターフェイスや継承について誤解していることを理解するのに役立つだろうか?私が検討してきたことの1つは、AbstractCarにCarTypeをフィールドとして保持させて、すべての実装がAbstractCarクラスでif文を使用して正しいFUEL_CAPACITY値に切り替え、SmallCarとLargeCarをコンストラクタまたは実際の実装があまりないか、あるいは実際に実装されていないファクトリクラスです。
事前にお手伝いいただきありがとうございます。私は少し長く気付いていますが、私が学んでいるコンセプトを完全に理解していること、そして私が正しく実装していることを確認しようとしています。必ずしも正解であるとは限りません。
ロジックを値で 'AbstractCar'に転送できます。次に、これらの値を 'SmallCar'と' LargeCar'のコンストラクタで設定します。これは1つのアプローチになります。あなたが指摘したように、あなたは常に親クラスに共通ロジックを持たなければなりません。重複するコードを避けたい。次に、コンストラクタで異なる値を設定していることを確認するだけです。そしてもしあなたが修正値を知っていれば、 'SmallCar'または' LargeCar'にパラメータを渡すことを省略して、その固定値をコンストラクタ内の 'super()'呼び出しで設定することさえできます。 –