[英]Why static methods of Parent Class gets hidden in Child Class?
這是偽代碼
class A
{
public static void m1()
{
System.out.println("Parent");
}
}
class B extends A
{
public static void m1()
{
System.out.println("Child");
}
}
此代碼編譯成功。 擁有 @Override 注釋會引發編譯錯誤。 所以請解釋一下方法隱藏的概念。 Parent 靜態方法是否在 Child 中被繼承?
甲static
方法屬於一個class
,而不是的一個實例class
。 出於這個原因,對static
方法的調用總是使用引用類型而不是實例類型來解決。
運行時多態僅適用於實例方法。 因此,示例程序中對m1
的以下兩個調用都將導致調用A
中的m1
。
A aReferenece = new B();
A.m1();
aReference.m1();
由於實例類型在決定調用哪個方法方面沒有任何作用,因此能夠覆蓋static
方法是沒有意義的,因為方法調用是在編譯時本身解決的。
也就是說, static
方法仍然可以被繼承,因此被子類重新定義/隱藏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.