繁体   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