2015-10-25 83 views
2

我是新來的Java,我想知道什麼解決方案更正確,爲什麼。多繼承或多接口

我有這兩個接口:

interface Account 
{ 
    public double getBalance(); 
} 

interface Taxable 
{ 
    public double calculateTaxes(); 
} 

我需要實現這兩個接口的類。

對我來說,更直觀此解決方案:

class TaxableAccount implements Account, Taxable 
{ 
    @Override 
    public double calculateTaxes() 
    { 
     return 10; //just for example 
    } 

    @Override 
    public double getBalance() 
    { 
     return 20; 
    } 

}

但我讀一本書,有這樣的解決方案:

interface TaxableAccount extends Account, Taxable 
{ 
} 

class AccountWithTaxes implements TaxableAccount 
{ 
    @Override 
    public double calculateTaxes() 
    { 
     return 10; 
    } 

    @Override 
    public double getBalance() 
    { 
     return 20; 
    } 
} 

感謝。

+1

我看不出有什麼理由在這裏創建第三個接口。人們經常讓一個類實現多個接口,而沒有使一個新接口擴展所有其他接口。 –

+2

附註:永遠不要用浮點錢。浮點/雙精度不能準確地表示您將遇到的數字中的大部分數字,並且結果中會出現舍入誤差。改用'BigDecimal'或縮放'long'(即儲存在'long'變量中的美分)。 –

回答

3

TaxableAccount接口將毫無意義,除非您打算爲其添加內容 - 至少說一個額外的方法。一個空的界面是'代碼味道',應該刪除,留下完美的第一個例子。

這是一種「氣味」的另一個線索是,在第二個例子中,您很難爲課堂提出一個好的,簡單的名字 - 大多數情況下,命名應該是明顯的和不言而喻的,因爲它是在第一個例子中。

+0

+1但是_「命名應該是明顯的和不言而喻的」 - - 哦,它非常簡單:-)根據Martin Fowler的說法,關於軟件開發的兩件最難的事情是緩存一致性,一個錯誤。 –

+1

這是三件事情,拉比福勒經常是錯的。軟件開發中最困難的事情是獲得報酬,第二最難的不是殺死你使用的每個庫的作者;) –

+0

erm ...報價是自引用(逐個錯誤。 ..) –