簡體   English   中英

為什么父類的靜態方法隱藏在子類中?

[英]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.

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