我有一個類結構,我希望基類中的某些方法可以從直接從基類派生的類訪問,但不能派生自派生類。根據Java語言規範,可以覆蓋繼承方法的訪問規範,使它們更公開,但不是更私密。例如,這是我需要做的要點,但是非法:是否可以在Java中隱藏或降低對繼承方法的訪問?
// Defines myMethod
public class Base {
protected void myMethod() {}
}
// Uses myMethod and then hides it.
public class DerivedOne extends Base {
@Override
private void myMethod();
}
// can't access myMethod.
public class DerivedTwo extends DerivedOne {
}
有什麼辦法可以做到這一點嗎?
編輯解釋爲什麼我想這樣做:
在這種情況下,類結構是數據處理和進口結構。它讀入並分析充滿表格數據的文本文件,然後將它們存儲在數據庫中。
基類是管理數據庫處理部分的基表類。其中包含相當數量的功能,這對所有表類型都很常見 - 因爲一旦它們在數據庫中,它們就會變得統一。
中間類是特定於正在解析的文件中的表的類型,並具有表解析和導入邏輯。它需要訪問一些基類的數據庫訪問函數。
頂級類是特定於表的,只不過是以父類可以理解的方式初始化表的佈局。此外,基類的用戶不需要查看或訪問中間類所具有的數據庫特定功能。實質上,我想把這些函數只展現在基類之上的一層,而不是其他人。
我問,因爲雖然我作爲例子發佈的代碼是非法的,但可能還有其他一些手段來完成相同的目的。我問是否有。
也許隱藏是一種錯誤的方式來描述這個 - 我真正需要做的是將一些應該是基類私有的功能公開到層次結構中上一級的類中。隱藏會做到這一點 - 但我可以看到隱藏是一個問題。有沒有另一種方法來做到這一點?
由於DerivedOne是一個基地,它必須容納基地的合同。順便說一下,這就是爲什麼委託(複合模式)通常比繼承更受歡迎的原因。 – 2009-12-14 18:03:31
@Steve我不相信複合模式可以在這裏工作。從本質上講,我只需要將一些對基類應該是私有的功能展示給一個級別的類。 – 2009-12-14 18:33:39
更新了我的答案。 – rsp 2009-12-14 19:56:27