簡體   English   中英

使用引用變量調用靜態方法

[英]static method calling using reference variable

 Duck d = new Duck();
 string[] s = {};
 d.main();

當我們嘗試使用引用變量而不是類名調用靜態方法時,編譯器會產生錯誤嗎?

JLS定義的通過引用調用靜態方法是合法的 Java。 但它在許多編碼標准中都不受歡迎。 因此,一些編譯器和一些 IDE 支持為它發出警告。

如果您使用標准編譯器,則不會。

但它應該。

你永遠不應該那樣調用靜態方法。 這樣做絕對沒有任何價值,它不會更快或更具可讀性,但它是一顆定時炸彈。 考慮這種情況:

class A {
    static void bar() {
        System.out.println( "A" );
    }
}

class B extends A {
    static void bar() {
        System.out.println( "B" );
    }
}

然后在你的代碼中的某個地方,你這樣做:

    A foo = new B();
    foo.bar();

現在,這里調用了哪個bar()方法?

這取決於編譯器設置。 例如,使用 eclipse 默認設置它會生成一個警告。

因此,請嘗試使用您的編譯器設置。

通常,它不會產生錯誤(由 JLS 定義)

首先對於你的問題,答案是否定的。顯然,你可以使用引用變量而不是類名來調用類內部的靜態方法,但僅僅因為它是合法的並不意味着它是好的。雖然它有效,但它造成誤導和可讀性差的代碼。當你說 d.main() 時,編譯器會自動將它解析回真正的類。

暫無
暫無

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

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