简体   繁体   English

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

[英]Overriding parent class variable with extended child variable

I am trying to extend class which has a variable that I also need to be extended. 我正在尝试扩展具有变量的类,我也需要扩展它。 Is there a "good" way of achieving this? 实现这一目标有“好”的方法吗?

I have extended parent class and a variable that is in the parent class. 我有扩展父类和父类中的变量。 Now I need to use extended variable in child class. 现在我需要在子类中使用扩展变量。 Here is pseudo-code: 这是伪代码:

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
}

How should I override "variableToUse" so that every-time I try to access this variable from "Child" I would access "ChildVariable" instead of "ParentVariable" ? 我应该如何覆盖"variableToUse"以便每当我尝试从"Child"访问此变量时,我将访问"ChildVariable"而不是"ParentVariable"

You will be effectively hiding the parent variable here by including "variableToUse" in the child class. 通过在子类中包含“variableToUse”,您将有效地隐藏父变量。

As variableToUse is of the type ParentVariable anyway, i suggest you leave it out of the ChildClass altogether, and use a getter which ensures type. 因为variableToUse的类型是ParentVariable,我建议你完全不让它离开ChildClass,并使用一个确保类型的getter。 Eg - 例如 -

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
    }
}

For further clarity, ensure this in the constructor 为了进一步说明,请在构造函数中确保这一点

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