簡體   English   中英

使用擴展子變量覆蓋父類變量

[英]Overriding parent class variable with extended child variable

我正在嘗試擴展具有變量的類,我也需要擴展它。 實現這一目標有“好”的方法嗎?

我有擴展父類和父類中的變量。 現在我需要在子類中使用擴展變量。 這是偽代碼:

public class Parent {

    private ParentVariable variableToUse;
    //getters, setters
}

public class ParentVariable {
    //some fields
}

public class ChildVariable extends ParentVariable {
    //more fields
}

public class Child extends Parent {

    private ChildVariable variableToUse;
    //getters, setters
}

我應該如何覆蓋"variableToUse"以便每當我嘗試從"Child"訪問此變量時,我將訪問"ChildVariable"而不是"ParentVariable"

通過在子類中包含“variableToUse”,您將有效地隱藏父變量。

因為variableToUse的類型是ParentVariable,我建議你完全不讓它離開ChildClass,並使用一個確保類型的getter。 例如 -

public class Child extends Parent {

    //private ChildVariable variableToUse; -> remove this

    private ChildVariable checkAndGetChildVariable() {
          if(variableToUse instanceof ChildVariable) {
                return (ChildVariable)variableToUse;
          }
          return null;//Or throw exception
    }
}

為了進一步說明,請在構造函數中確保這一點

public class Child extends Parent {

    //private ChildVariable variableToUse; -> remove this
    public Child(ParentVariable variable) {
          super(checkChildVariable(variable));
    }

    private static ChildVariable checkChildVariable(ParentVariable variable) {
          if(variable instanceof ChildVariable) {
                return (ChildVariable)variable;
          }
          throw UnsupportedOperation("invalid type");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM