在Java中的子类中使用父变量的扩展版本

时间:2017-07-11 08:20:27

标签: java inheritance parent-child extends

我有一个扩展类,需要在父类中使用和扩展变量版本。到目前为止,我已经开始使用它了:

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,但这很难看并引发一些问题。有更好的方法来执行此操作吗?感谢。

1 个答案:

答案 0 :(得分:2)

如果可以使你的超类抽象化,你可以使用泛型来解决这个问题:

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方法访问字段,即使在子类中也是如此。

如果这是不可能的(可能即使它是),这表明您的设计存在缺陷。可能需要重构所有类以实现干净的体系结构。不幸的是,这取决于所有四个类的整个实现,也可能取决于使用这些类的整个上下文。对于stackexchange来说,答案太宽泛了。