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

标签 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,这或多或少就可以工作,但这很丑陋并且会引发一些问题。有更好的方法来执行此操作吗?谢谢。

最佳答案

如果可以使您的父类(super class)抽象,您可以通过使用泛型来解决这个问题:

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
    }
}

请注意,我已将您的字段设为私有(private)。您应该始终通过 getter 和 setter 方法访问字段,即使在子类中也是如此。

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

关于java - 在 Java 的子类中使用父变量的扩展版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45029090/

相关文章:

php - 如何通过mysql表跟踪parent_id?

java - 良好的 JPA Java 桌面应用程序示例

java - sc.hasNextInt() 什么时候等待输入?

java - 如何创建包含集合的不可变类的不可变构建器?

java - 迭代实现 Iterable<Item> 的类中数组的非空部分

C++:将类的子项存储在具有其类型的变量中

C++多态和虚函数

mysql - 我怎样才能让这种亲子关系发挥作用?

c++ - `shared_ptr` 是如何实现协变的?

elasticsearch - Elasticsearch has_child不返回结果