簡體   English   中英

使用接口時,為什么多態不能在泛型方法中起作用?

[英]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”。

您可以在此處找到類似的已回答問題

您的代碼段中有太多問題。

  1. 您試圖將字段定義為接口。 這是禁止的。 接口中僅允許使用方法或靜態字段。
  2. 您的方法f不會終止。
  3. 目前尚不清楚您要做什么。

我建議您先閱讀有關變質的知識。 然后嘗試執行一些沒有泛型的練習。 然后閱讀有關泛型的知識,思考您將要做什么並使用泛型實現第二個練習。 然后,如果您仍有問題,請在此處發布,我們將很樂意為您提供幫助。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM