我正在尝试扩展具有变量的类,该变量也需要扩展。有没有实现这一目标的“好方法”?
我有扩展的父类和在父类中的变量。 现在,我需要在子类中使用扩展变量。这是伪代码:
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"
?
答案 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");
}
}