子類中的方法之重寫和static方法不能被重寫

1.重寫一個方法,即在子類中完全取代它的功能,重寫後的方法必須和父類中的被替代方法擁有完全一致的方法簽名,包括返回值。

2.static修飾的方法不能被重寫,下面看一個容易被誤解爲static方法被重寫的例子

class Base {
static void aMethod() {
System.out.println("Base.aMethod");
}
}


public class Cravengib extends Base {
public static void main(String[] args) {
Cravengib c = new Cravengib();
c.aMethod();
Base b = new Cravengib();
b.aMethod();
}

static void aMethod() {
System.out.println("Cravengib.aMethod");
}
}

輸出結果:Cravengib.aMethod

    Base.aMethod

從結果我們可以看出,static 方法與類關聯,而不是與特定的類的實例相關聯,它不在意什麼類型的類正在創建它,而僅僅在意引用的類型。

b是一個類Cravengib在內存中的一個Base類型的實例的引用,如果一個static方法被調用了JVM不會檢查什麼類型正在指向它,而只會調用跟Base類相關聯的的方法的實例。

再來看一個正確的方法重寫例子:

class Base {
void aMethod() {
System.out.println("Base.aMethod");
}
}


public class Cravengib extends Base {
public static void main(String[] args) {
Cravengib c = new Cravengib();
c.aMethod();
Base b = new Cravengib();
b.aMethod();
}

void aMethod() {
System.out.println("Cravengib.aMethod");
}
}

輸出結果:Cravengib.aMethod

    Cravengib.aMethod

從輸出結果看到語句:b.aMethod();執行的是子類中的aMethod方法體,即子類中的方法完全替代了父類中被重寫的方法

發佈了28 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章