0

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

在这段代码中,我预计 f an g 方法会打印出“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();
    }
4

2 回答 2

4

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

实际上的声明interface A变成了这样:

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

你不能覆盖finaljava中的变量。

如果你写

System.out.println(B.n);

它将打印“BB”。

您可以在此处找到已回答的类似问题

于 2012-06-17T08:47:45.887 回答
0

您的代码段中存在太多问题。

  1. 您试图将字段定义为接口。这是禁止的。接口中只允许使用方法或静态字段。
  2. 您的方法f没有终止。
  3. 目前尚不清楚您要做什么。

我建议您先阅读有关变质的内容。然后尝试在没有泛型的情况下进行一些练习。然后阅读泛型,想想你要做什么,然后用泛型实现第二个练习。然后,如果您仍有问题,请在此处发布,我们将很乐意为您提供帮助。

祝你好运。

于 2012-06-17T08:51:08.183 回答