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,另一个来自 AgeFactor 经验丰富专业。事实上,它具有相同的名称完全是巧合:如果您有一个对象,并且我们所知道的只是它是一个 AgeFactor,那么该对象的 AgeFactor 版本将使用字段。

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

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

相关文章:

Java:从数据库检索数据并加载到 JTable 中

java - 为什么创建一种类型的引用变量但将其分配给另一种类型?

PHP 在另一个命名空间中使用 root 命名空间而不使用反斜杠

java - 泛型和数组

java - 实体继承和鉴别器列

Java:可以保留 jvm 状态并在应用程序重新启动时恢复吗?

JavaScript 对象不会打印

c# - 在 C# 中使用一对(三重等)值作为一个值的最佳方式是什么?

java - "<T extends ...>"返回类型的意外编译器警告

java rmi死锁