java - Java 中的通用字段多态性

标签 java oop generics polymorphism

我真的对泛型感到困惑,请帮助我解决我的情况:

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的字段factorm.factor 应该指的是 youngpro 我在运行时给出的类型。

如果m实际上指的是AgeFactor,那么我理解m.factor将始终指代AgeFactor的因子,因为多态性不适用于字段。如果是这样,那么泛型的需求是什么? Java 的泛型本身就是泛型吗? 请帮助我克服泛型。

最佳答案

字段不会像方法那样被重写。如果你想要这种多态性,你必须用方法来实现,而不是用字段。

这里,experiencedpro 有两个名为 factor 的不同字段,一个来自 AgeFactor,另一个来自 experiencedpro。事实上,它具有相同的名称完全是巧合:如果您有一个对象,并且我们所知道的只是它是一个 AgeFactor,那么将使用该字段的 AgeFactor 版本。

此设计的一个更明智的版本可能是只有一个名为 factor 的字段,并将其设置在每个类的构造函数中。

关于java - Java 中的通用字段多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253806/

相关文章:

java - 如何使用循环将随机整数打印到多行?

java - Suppressionfilter 在 checkstyle 配置文件中不起作用

generics - C++/CLI 泛型,在 array<> 和其他集合中使用 T

oop - 何时在 VBA 中使用类?

c# - 从列表递归创建树

java - CDI:手动获取用泛型声明的类的 bean 实例

java - 如何从池或堆中查找字符串

java - Hibernate CreateNativeQuery 返回空列表

java - 在没有指针的情况下用 C 编写二叉搜索树

php - 在哪里存储我的 OOP 类需要的巨大常量