2015-04-03 51 views
-2

我目前正在開發一個項目,其中包括創建一個簡單的軟件cloudShare。Java繼承(Java新手)

我們有2種類型的用戶,Basic和Premium。基本的只有2GB的空間,而Premium則有5GB。

基本會員不能與他人分享他們的文檔,但可以接受高級會員文檔。

當高級會員與基本會員共享文件時,基本會員的可用空間減少了整個文件大小的50%,而高級會員理論上可以接收永遠不會耗盡的無限共享文件空間。

在我CloudManager類我有用戶(超類)的陣列,這樣我就可以節省保費和基本成員在同一陣列上。

問題是當我嘗試共享文檔時,我想要使用方法shareDocument(存在於BasicUser類和PremiumUser類中,它們有點不同,因爲在一種方法中可用空間減少了)。

但我無法使用因爲它不會在超存在的,只有在subclasses.How我可以解決此方法?

+1

向超類添加一個'abstract'方法。 – 2015-04-03 20:37:49

+5

請將您的標題更改爲描述您問題的內容。目前它完全沒用。 – 2015-04-03 20:38:53

+1

那麼,爲什麼不把一個抽象的shareDocument方法添加到超類中並在子類中覆蓋它呢? – 2015-04-03 20:39:24

回答

1

如果所有用戶都具有shareDocument方法,那麼你應該在用戶類中定義它。您可以將其定義爲抽象方法,這意味着您必須在所有子類中實現它,或者您可以在用戶中提供默認實現並在子類中覆蓋它。

如果不是所有用戶都具有shareDocuments方法,那麼你可以考慮讓你的用戶執行該確實有shareDocuments方法並創建該接口類型,而不是用戶的集合的接口。

如果您堅持將子類型存儲在沒有shareDocuments方法的類型的集合中,則可以通過將包含的對象專門轉換爲具有shareDocuments方法的類型來訪問它,但這是一種冒險在這裏操縱,我不會推薦它。

0

你應該考慮重新設計User來成爲一個抽象類。這樣,您可以使用它來跨多個類共享方法。它看起來是這樣的:從用戶繼承可以輕鬆覆蓋的方法shareDocument以及叫它

public abstract class User { 
    public User() { 
     //common initialization junk 
    } 

    public abstract Object shareDocument(); 
} 

現在任何東西。

+0

哎呀抱歉,正在快速回答:P。 IDK什麼他返回類型將是我把對象 – 2015-04-03 20:41:10

0

雖然大多數建議的解決方案是正確的&會爲現在的工作。我認爲分層設計對於變化來說不是很靈活。

將來如果您添加其他功能或添加其他類型的用戶,則可能會遇到問題。

我認爲更好的方法是使用繼承組合。查看設計模式,如命令,裝飾器,這會給你更好的想法。