我想聲明一個超類的數據成員,私營:訪問私有數據成員
public abstract class superclass {
private int verySensitive;
abstract int setVerySensitive(int val); // must be overriden by subclass to work properly
}
public class subclass extends superclass {
@Override
protected int setVerySensitive(int val) {
if (val > threshLow && val < threshHigh) // threshHigh is calculated in superclass constructor
verySensitive = val;
}
}
正如你所看到的,我這裏有一個問題:超不能訪問verySensitive,因爲它是私人的,但我不想做出非常敏感的保護,因爲它非常敏感。
另請注意,setVerySensitive是抽象的,因爲檢查有效值只能在超類構造完成後才能完成。
你能推薦一種擺脫這種「捕捉22」情況的優雅方式嗎?
這不就是語言的_feature_?你只是選擇設置爲受保護的,如果它需要繼承 – 2011-03-31 19:42:48
@Greg Flynn你是對的,在C++中這不是問題,因爲受保護的數據成員可以被子類訪問,但仍然對類的用戶隱藏。在Java中,protected使它可用於整個包,而不僅僅是超類。 – 2011-03-31 20:00:40