簡體   English   中英

kotlin 中的靜態最終字段繼承

[英]Static final field inheritance in kotlin

我在這里有一個非常簡單的問題,但無法弄清楚。 考慮一個java類:

class A {
    public static final int AA=5;
}

將(內部)轉換為 kotlin 如下:

open class A {
    companion object {
        val AA:Int=5
    }
}

至少我是這么認為的。 現在,如果您在 Java 中繼承:

class B extends A {
    int AAA;
}

您可以像這樣通過 B 訪問字段 AA(從 A): B.AA 。 但是,在 Kotlin 中這是不可能的。 訪問它的唯一方法是通過 A.AA。 這是內置功能還是我做錯了什么?

在 Java 中,當編譯器看到B.AA ,它會自動將其轉換為A.AA 那里沒有真正的繼承或覆蓋。

Kotlin 的開發人員決定不模擬此功能,因為它不符合將靜態方法視為屬於object想法: B的伴生對象不擴展A的伴生對象,並且不能,因為您不能擴展一個object

請注意,類似地,在 Java 中,您可以通過a.AA訪問該字段,其中aA的實例; 你也不能在 Kotlin 中做到這一點。

暫無
暫無

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

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