gpt4 book ai didi

java - 使用接口(interface)时,为什么多态性在泛型方法中不起作用?

转载 作者:行者123 更新时间:2023-12-01 19:03:53 25 4
gpt4 key购买 nike

我正在尝试使用泛型编写一种适应不同类型接口(interface)的方法。

在这段代码中,我预计方法 f an g 会打印出“BB”而不是“接口(interface) A”。为什么会发生这种情况?

interface A {
String n="interface A";
}

interface B extends A {
String n = "BB";
}

public class Main {
<T extends A> void f() {
T a = null;
System.out.println(a.n);
}

<T extends A> void g() {
System.out.println(T.n);
}

public static void main(String[] args) {
Main m = new Main();
m.<B>f();
m.<B>g();
}

最佳答案

在您的代码中,任何扩展/实现 A 的类或接口(interface)都将继承常量变量 n

接口(interface)A的声明实际上是这样的:

interface A {
public static final String n = "interface A"; //constant static varible
}

并且您不能覆盖 java 中的 final 变量。

如果你写

System.out.println(B.n);

它将打印“BB”。

您可以找到类似问题的答案here

关于java - 使用接口(interface)时,为什么多态性在泛型方法中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069952/

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