2017-10-29 390 views
1

這是僞代碼爲什麼父類的靜態方法隱藏在子類中?

class A 
{ 
    public static void m1() 
    { 
    System.out.println("Parent"); 
    } 
} 

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

此代碼編譯成功。擁有@Override註釋會引發編譯錯誤。所以請解釋有關方法隱藏的概念。 父級靜態方法是否在Child中繼承?

+2

靜態方法屬於一個類。它們是繼承的,但不能被覆蓋。 – CKing

+0

請解釋概念 –

+1

閱讀此https://docs.oracle.com/javase/tutorial/java/IandI/override.html – Rohan

回答

0

A static方法屬於class而不是class的實例。由於這個原因,對static方法的調用總是使用引用類型而不是實例類型來解析。

運行時多態只適用於實例方法。因此,示例程序中以下對m1的調用將導致調用Am1

A aReferenece = new B(); 
A.m1(); 
aReference.m1(); 

由於實例類型沒有任何作用,在決定哪些方法被調用,能夠覆蓋一個static方法玩是沒有意義的,因爲該方法調用是在編譯時自籌解決。

也就是說,static方法仍然可以被繼承,因此被子類重新定義/隱藏。

相關問題