簡體   English   中英

Java中的每個方法都是可覆蓋的

[英]Is every method in Java overridable

Java中的每個方法都是可覆蓋的嗎? 我知道在定義為虛擬的C#方法中可以覆蓋,這是如何在Java中實現的?

並非每個方法都可以覆蓋:您不能覆蓋finalprivatestatic

以下是這在實踐中意味着什么的一個小樣本:

class Base {
    public final void fun1() {
    }

    private void fun2() {
        System.out.println("Base::fun2");
    }

    public void fun2Call() {
        fun2();
    }        
}

class Rextester extends Base
{  
    /*
    @Override
    public void fun1() { // compile error, because Base::fun1 is final
    } 
    */

    // if @Override is uncommented, it will protect you from overriding private methods
    //  otherwise you will not get any compile time error.
    //@Override 
    private void fun2() {
        System.out.println("Rextester::fun2");
    }    

    public static void main(String args[])
    {
        Base b = new Rextester();
        b.fun2Call(); // will output Base::fun2,
                      // if you change private to protected or public 
                      // then you will see Rextester::fun2 in output
    }
}

我認為static方法覆蓋與private方法覆蓋的情況相同,至少你會得到類似的行為。 當然,將static方法更改為publicprotected仍然不允許覆蓋它。

final,static和private方法不可覆蓋。 其余的都是。

最終防止覆蓋,因為,這就是它的意思。

static意味着屬於Class而不是實例。

私人 - 沒有知名度,沒有超越。

此外,JIT在將方法視為不可覆蓋時更快樂,因為它意味着方法的單態分派,這意味着它是內聯方法的完美候選者,因為沒有其他實例可以覆蓋此方法。 這對你來說可能並不重要,但它幾乎加速了這個方法。

不,不是全部。 標有finalprivatestatic修飾符的方法根本不可覆蓋。

暫無
暫無

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

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