我正在尝试使用泛型编写一种适应不同类型接口的方法。
在这段代码中,我原本期望方法f打印出“BB”而不是“接口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();
}
答案 0 :(得分:4)
在您的代码中,任何扩展/实现A
的类或接口都将继承常量变量n
。
interface A
的宣言实际上是这样的:
interface A {
public static final String n = "interface A"; //constant static varible
}
并且您无法覆盖java中的final
变量。
如果你写
System.out.println(B.n);
它将打印“BB”。
您可以找到回答类似的问题here
答案 1 :(得分:0)
您的代码段中存在太多问题。
f
未终止。我建议你先阅读有关变质的内容。然后尝试在没有泛型的情况下实施一些练习。然后阅读关于泛型,想想你要做什么,并用泛型实现第二个练习。如果您仍然有问题在这里发布,我们将很乐意为您提供帮助。
祝你好运。