2017-05-29 20 views
-1

我有一些帶有「保護」範圍的字段的泛型類。是否有可能重寫或繼承類中的這個範圍?這裏是比如我一般(擴展)類:如何在繼承類中「覆蓋」字段的作用域?

public abstract class BaseDAO<T extends Entity> { 

protected MongoClient client; 
protected MongoCursor<Document> cursor; } 

那麼,怎麼樣,如果是最具體的,要改變「保護」到「私」在我的繼承類?

谷歌不理解我的請求,並提供了有關繼承的最基本的教程,這些教程沒有給出我的問題的答案。試圖在這裏搜索一些標籤「Java範圍覆蓋」等。沒有工作。

感謝您的反饋!

+1

你不能......它就這麼簡單。 – Stultuske

+1

如果您重新聲明子類中的字段,您將隱藏而不是覆蓋(請參閱:https://stackoverflow.com/questions/9414990/if-you-overwrite-a-field-in-a-subclass-of-a -class-子類別,有個字段-W)。就方法而言,您只能增加可見度(例如,保護公開)而不減少(保護到私人)。 –

+0

是的,我知道super.fieldName和只是fieldName是differend變量。但無論如何你回答了我的問題,謝謝! –

回答

-1

這是不可能的,並且不會遵守Liskov substitution principle,因爲您的繼承類會「隱藏」該字段(即您的繼承類無法與BaseDAO無縫交換)。

+0

因此,在繼承者中創建私有字段的唯一方法是不繼承這些字段,對嗎? –

+0

不確定你在這裏是什麼意思。您的子類將始終繼承父字段,因此您無能爲力。但是你絕對可以在你的子類中添加私有字段。 – jdebon

+0

是的,這就是我所問的。謝謝! –

-1

您已經收到正確答案。你不能降低能見度只能增加它。 (as @ d.j.brown said)

因此,您可以覆蓋父方法並將可見性提高至public,但不能將其降至private