[英]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.