在 Java 中的子 class 中使用父变量的扩展版本
Using an extended version of a parent variable in a child class in Java
我有一个扩展 class,它需要使用父 class 中变量的扩展版本。到目前为止,我一直在像这样使用它:
public class ParentClass
{
protected ParentVariable variable;
public ParentClass(){
this.variable = new ParentVariable();
}
....
}
public class ChildClass extends ParentClass
{
public ChildClass(){
super();
this.variable = new ChildVariable();
//Where ChildVariable Extends ParentVariable
....
}
}
只要我每次使用变量时都将其转换为 ChildVarible,这或多或少会起作用,但这很丑陋并且会引发一些问题。有没有更好的方法来执行此操作?谢谢
如果可以使您的超类抽象化,您可以使用泛型来解决此问题:
public abstract class ParentClass<T extends ParentVariable>
{
private T variable;
protected T getVariable(){
return variable
}
protected void setVariable(T variable){
this.variable = variable;
}
....
}
public class ChildClass extends ParentClass<ChildVariable>
{
public ChildClass() {
setVariable(new ChildVariable());
//Where ChildVariable Extends ParentVariable
ChildVariable foo = getVariable() // no cast nessecary
}
}
请注意,我将您的字段设为私有。您应该始终通过 getter 和 setter 方法访问字段,即使在 sub类.
中也是如此
如果这不可能(即使可能),则表明您的设计存在缺陷。可能需要为 类 重构所有内容以实现干净的架构。不幸的是,这取决于所有四个 类 的整体实现,可能还取决于使用这些 类 的整个上下文。对此问题的回答对于 stackexchange 来说太宽泛了。
我有一个扩展 class,它需要使用父 class 中变量的扩展版本。到目前为止,我一直在像这样使用它:
public class ParentClass
{
protected ParentVariable variable;
public ParentClass(){
this.variable = new ParentVariable();
}
....
}
public class ChildClass extends ParentClass
{
public ChildClass(){
super();
this.variable = new ChildVariable();
//Where ChildVariable Extends ParentVariable
....
}
}
只要我每次使用变量时都将其转换为 ChildVarible,这或多或少会起作用,但这很丑陋并且会引发一些问题。有没有更好的方法来执行此操作?谢谢
如果可以使您的超类抽象化,您可以使用泛型来解决此问题:
public abstract class ParentClass<T extends ParentVariable>
{
private T variable;
protected T getVariable(){
return variable
}
protected void setVariable(T variable){
this.variable = variable;
}
....
}
public class ChildClass extends ParentClass<ChildVariable>
{
public ChildClass() {
setVariable(new ChildVariable());
//Where ChildVariable Extends ParentVariable
ChildVariable foo = getVariable() // no cast nessecary
}
}
请注意,我将您的字段设为私有。您应该始终通过 getter 和 setter 方法访问字段,即使在 sub类.
中也是如此如果这不可能(即使可能),则表明您的设计存在缺陷。可能需要为 类 重构所有内容以实现干净的架构。不幸的是,这取决于所有四个 类 的整体实现,可能还取决于使用这些 类 的整个上下文。对此问题的回答对于 stackexchange 来说太宽泛了。