[英]Why doesn't polymorphism work in a generics method when using an interface?
我正在嘗試編寫一種使用泛型適應不同類型接口的方法。
在該代碼中,我希望方法f 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();
}
在您的代碼中,擴展/實現A
任何類或接口都將繼承常量n
。
實際上, interface A
的聲明如下:
interface A {
public static final String n = "interface A"; //constant static varible
}
並且您不能在Java中覆蓋final
變量。
如果你寫
System.out.println(B.n);
它將打印“ BB”。
您可以在此處找到類似的已回答問題
您的代碼段中有太多問題。
f
不會終止。 我建議您先閱讀有關變質的知識。 然后嘗試執行一些沒有泛型的練習。 然后閱讀有關泛型的知識,思考您將要做什么並使用泛型實現第二個練習。 然后,如果您仍有問題,請在此處發布,我們將很樂意為您提供幫助。
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.