在 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 来说太宽泛了。