用扩展子变量覆盖父类变量

时间:2019-06-19 06:32:39

标签: java variables inheritance overriding

我正在尝试扩展具有变量的类,该变量也需要扩展。有没有实现这一目标的“好方法”?

我有扩展的父类和在父类中的变量。 现在,我需要在子类中使用扩展变量。这是伪代码:

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"

1 个答案:

答案 0 :(得分:0)

您将通过在子类中包含“ variableToUse”来有效地隐藏父变量。

由于variableToUse的类型无论如何都是ParentVariable,我建议您将其完全排除在ChildClass之外,并使用确保类型的吸气剂。 例如-

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");
    }
}