2016-11-29 67 views
-1

假設我有一個超類3類(Book,Clothes,Food)的類商店,現在我想在它們中共同添加2種常用方法(描述和價格),只需要添加(計算稅)在食品類中的方法.... 在主類如何在繼承類/接口時避免方法的常見重複?

創建超級引用的數組,然後在每個引用上我有不同類的對象隨機,但我想我是不希望有(計算稅)方法在Book和clothes中,我只希望它在Food reference(來自數組)中。

如何通過動態方法調度和接口實現此目標?

感謝的確

+1

你的意思是你有三個類擴展存儲,對吧?商店不能擴展三個類。 (這聽起來應該是StoreItem或類似的東西......書本不是商店。) –

+1

接下來,如果您通過Store參考調用'calculateTax',那麼如果它不是*,那麼您希望它做什麼*對食物對象的引用? –

+0

哎呀是的,我會糾正它 –

回答

1

你可以寫在Store類中的默認方法。如果未被子類覆蓋,則只有在被調用時纔會拋出錯誤。

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... 
    } 
    ... 
} 

另一種方法是延長Store界面添加額外的方法

public interface Store { 
    ... 
} 

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

現在,當你定義你可以實現的類如Food t TaxedStore並且當您定義像Book這樣的類時,您可以實施Store