2016-11-29 4 views
-1

3つのクラス(Book、Clothes、Food)のスーパークラスであるStore Storeを持っているとしましょう。今は2つの一般的なメソッド(DescriptionとPrice)を共通に追加したいだけです。 )メソッド... メインクラスクラス/インターフェイスを継承している間にメソッドの共通の反復を避ける方法は?

スーパーリファレンスの配列を作成し、それぞれのリファレンスにクラスのオブジェクトをランダムに配置しますが、私が望むものは何もありません)メソッドで、私は食品参照(配列から)でそれを欲しいだけです。

Dynamic Method Dispatch and Interfacesでこの目標を達成するにはどうすればよいですか?あなたはStoreクラスのデフォルトのメソッドを書くことができ、実際

+1

あなたはStoreを拡張する3つのクラスがあることを意味します。ストアは3つのクラスを拡張できません。 (これはStoreItemやそれに類するものでなければなりません。本は店舗ではありません。) –

+1

次に、Storeリファレンスを介して 'calculateTax'を呼び出すと、もしそうでなければ何をしたいですか? * Foodオブジェクトへの参照? –

+0

おっと私はそれを訂正します –

答えて

1

感謝。子クラスによってオーバーライドされない場合は、呼び出されたときにのみエラーがスローされます。

public interface Store { 
    default double calculateTax() { 
     throw new UnsupportedOperationException("Operation not defined for this store"); 
    } 
    ... 
} 

あなたがFoodを定義するときは、このメソッドオーバーライドすることができます:あなた

public class Food implements Store { 
    @Override 
    public double calculateTax() { 
     // calculate tax... 
    } 
    ... 
} 

別の方法としては、今の余分な方法

public interface Store { 
    ... 
} 

public interface TaxedStore extends Store { 
    double calculateTax(); 
    ... 
} 

を追加するStoreインタフェースを拡張することになるがFoodのようなクラスを定義すると、 t TaxedStoreなどのクラスを定義した場合は、を実装できます。

関連する問題