我真的对泛型感到困惑,请帮助我解决我的情况:
public <M extends AgeFactor> void setAgeFActor(M m){
System.out.println("referene receiveed"+m.factor); //WHAT SHOULD IT REFER TO?? AgeFactor or type given at Runtime as young
this.factor=m.factor;
}
在上面的代码中,引用M m
指的是AgeFactor
或我在运行时给出的类型。
假设我通过以下方式调用它:
ath1.setAgeFActor(new young()); //ath1 is referring to setAgeFActor method's class
层次结构是:
class AgeFactor {
String factor;
}
class young extends AgeFactor {
String factor = "Young";
public String toString() {
return " " + factor + " ";
}
}
class experienced extends AgeFactor {
String factor = "Experienced";
public String toString() {
return " " + factor + " ";
}
}
class pro extends AgeFactor {
String factor = "Pro";
public String toString() {
return " " + factor + " ";
}
}
我想知道的是为什么m.factor
引用AgeFactor
的字段factor
? m.factor
应该指的是 young
或 pro
我在运行时给出的类型。
如果m实际上指的是AgeFactor,那么我理解m.factor将始终指代AgeFactor的因子,因为多态性不适用于字段。如果是这样,那么泛型的需求是什么? Java 的泛型本身就是泛型吗? 请帮助我克服泛型。
最佳答案
字段不会像方法那样被重写。如果你想要这种多态性,你必须用方法来实现,而不是用字段。
这里,experienced
和 pro
有两个名为 factor
的不同字段,一个来自 AgeFactor
,另一个来自 experienced
和 pro
。事实上,它具有相同的名称完全是巧合:如果您有一个对象,并且我们所知道的只是它是一个 AgeFactor
,那么将使用该字段的 AgeFactor
版本。
此设计的一个更明智的版本可能是只有一个名为 factor
的字段,并将其设置在每个类的构造函数中。
关于java - Java 中的通用字段多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253806/