Java中final、static關鍵字與方法的重寫和繼承易錯點整理
1.final方法不能被重寫
如果父類中的方法被聲明為final,那么這個方法就不能被子類重寫。嘗試在子類中定義與父類final方法同名、同參數(shù)列表、同返回類型(或子類型)的方法會導致編譯錯誤。
class Parent {
final void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 編譯錯誤:無法重寫final方法
@Override // @Override注解會觸發(fā)編譯器檢查,但在這里不適用
void show() {
System.out.println("Child show()");
}
}
2.static方法不是重寫,而是遮蔽
static方法不能被重寫,因為在Java中,static方法是類方法,而不是實例方法。如果你在子類中定義了與父類同名的static方法,那么這實際上是在子類中遮蔽了父類的static方法,而不是重寫它。
class Parent {
static void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 這不是重寫,而是遮蔽
static void show() {
System.out.println("Child show()");
}
}
3.final與static的組合
當一個方法同時被聲明為final和static時,它仍然是一個類方法,不能被重寫,也不能被子類中的同名方法所遮蔽(因為static方法總是通過類名來引用,所以子類中的同名static方法會被視為新的方法,而不是對父類方法的遮蔽)。但是,由于final的限制,這個組合實際上限制了任何嘗試在子類中定義同名方法的嘗試,因為final禁止了重寫,而static則使得方法調用與實例無關。
class Parent {
final static void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 嘗試定義同名方法會導致編譯錯誤,因為final禁止了重寫,而static使得方法調用與實例無關
// static void show() { ... } // 編譯錯誤
}
4.final與繼承
==final類不能被繼承。==如果你試圖繼承一個被聲明為final的類,編譯器會報錯。
final class FinalClass {
// ...
}
class AnotherClass extends FinalClass {
// 編譯錯誤:FinalClass是final的,不能被繼承
}
5.static與繼承
雖然static方法不能被重寫,==但static變量(字段)是可以被子類繼承的。==不過,子類不能直接修改繼承自父類的static變量(除非在子類中聲明了一個同名的static變量來遮蔽它)。子類可以通過類名來訪問父類的static變量,也可以通過子類的類名來訪問(如果子類沒有遮蔽它的話)。
class Parent {
static int value = 10;
}
class Child extends Parent {
// 這里沒有遮蔽Parent.value
// Child.value 仍然引用的是 Parent.value
}
總之,理解final、static以及它們與重寫和繼承之間的關系對于編寫清晰、可維護的Java代碼至關重要。
總結
到此這篇關于Java中final、static關鍵字與方法的重寫和繼承易錯點整理的文章就介紹到這了,更多相關final、static關鍵字方法重寫和繼承內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot實現(xiàn)簡單的登錄注冊的項目實戰(zhàn)
本文主要介紹了SpringBoot實現(xiàn)簡單的登錄注冊的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Springboot整合GateWay+Nacos實現(xiàn)動態(tài)路由
本文主要介紹了Springboot整合GateWay+Nacos實現(xiàn)動態(tài)路由,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08

