java - 子类需要设置父类的唯一对象字段?

标签 java object inheritance

我有一个父类,它有一个声明的唯一 ModelType 对象,它也有子类。每个子类都有一个唯一的模型类型,所以我希望引用变量“模型”在所有子类中都相同,以便可以引用该变量。但是,在将模型类型初始化为任何子对象之后,我的函数会抛出错误,因为该类型不是 ModelType,而是在本例中为 Cuboid 或 Pyramind(其中一个子对象)。

可能有比创建父对象并将其设置给子对象更好的方法。如何在父类中有一个可以设置为多种类型的引用变量?换句话说,变量“模型”需要是不同的类型。

class Parent {
  ModelType model;
}

class ChildOne extends Parent {
   model = new Cuboid();
   void float vertices(Pyramid c){
      // ... stuff ...
   }
}

class ChildTwo extends Parent {
   model = new Pyramid();

   void float vertices(Pyramid c){
      // ... stuff ...
   }
}

在将另一个 ChildTwo 的“模型”传递给该类时使用顶点时出现错误,其中:

The function vertices(ModelType) doesn't exist


ChildTwo a = new ChildTwo();
ChildTwo b = new ChildTwo();
a.vertices(b.model);

最佳答案

Generic class在这种情况下可以与 Upper Bouded WildCard 一起使用, 这样就可以根据子类类型参数限制vertices 方法接受参数。

abstract class Parent<T extends ModelType> {
    T model;

    abstract float vertices(T c);

    // To set the model, setter can be created in parent class.
    // Or through constructor of child class.
    void setModel(T modelToSet) {
        this.model = modelToSet;
    }
}

class ChildOne extends Parent<Cuboid> {
    ChildOne(Cuboid c) {
        this.model = c;
    }

    float vertices(Cuboid c) {
        // ... stuff ...
        return 0;
    }
}

class ChildTwo extends Parent<Pyramid> {
    ChildTwo(Pyramid p) {
        this.model = p;
    }

    float vertices(Pyramid p) {
        // ... stuff ...
        return 0;
    }
}

关于java - 子类需要设置父类的唯一对象字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851469/

相关文章:

java - 请帮我理解java结构

java - 使用另一个方法中的数组元素

C++在私有(private)扩展后公开一个变量

c++ - Iterator 方法无法继承 Const_iterator

java - 如何获取Solr字段类型

java - 在 Java 中解析持续时间的最简洁方法

javascript - 将 html 元素值添加到 javascript 对象属性

ios - 如何使用 Objective-C 创建和使用对象?

c# - 编程对象建议

python - 现有实例上的 SQLAlchemy 类继承