gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:12:33 24 4
gpt4 key购买 nike

我有一个父类,它有一个声明的唯一 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com