Java中final、static關(guān)鍵字與方法的重寫和繼承易錯點整理
1.final方法不能被重寫
如果父類中的方法被聲明為final,那么這個方法就不能被子類重寫。嘗試在子類中定義與父類final方法同名、同參數(shù)列表、同返回類型(或子類型)的方法會導(dǎo)致編譯錯誤。
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的組合
當(dāng)一個方法同時被聲明為final和static時,它仍然是一個類方法,不能被重寫,也不能被子類中的同名方法所遮蔽(因為static方法總是通過類名來引用,所以子類中的同名static方法會被視為新的方法,而不是對父類方法的遮蔽)。但是,由于final的限制,這個組合實際上限制了任何嘗試在子類中定義同名方法的嘗試,因為final禁止了重寫,而static則使得方法調(diào)用與實例無關(guān)。
class Parent { final static void show() { System.out.println("Parent show()"); } } class Child extends Parent { // 嘗試定義同名方法會導(dǎo)致編譯錯誤,因為final禁止了重寫,而static使得方法調(diào)用與實例無關(guān) // 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以及它們與重寫和繼承之間的關(guān)系對于編寫清晰、可維護的Java代碼至關(guān)重要。
總結(jié)
到此這篇關(guān)于Java中final、static關(guān)鍵字與方法的重寫和繼承易錯點整理的文章就介紹到這了,更多相關(guān)final、static關(guān)鍵字方法重寫和繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
快速解決springboot在yml配置了啟動端口但啟動還是8080問題
這篇文章主要介紹了快速解決springboot在yml配置了啟動端口但啟動還是8080問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03詳解spring cloud hystrix 請求合并collapsing
這篇文章主要介紹了詳解spring cloud hystrix 請求合并collapsing,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-053行代碼快速實現(xiàn)Spring Boot Oauth2服務(wù)功能
oauthserver是一個基于Spring Boot Oauth2的完整的獨立的Oauth服務(wù)器。僅僅需要創(chuàng)建相關(guān)數(shù)據(jù)表,修改數(shù)據(jù)庫的連接信息,你就可以得到一個Oauth服務(wù)器。這篇文章給大家介紹3行代碼快速實現(xiàn)Spring Boot Oauth2服務(wù)功能,需要的朋友參考下吧2018-04-04Android Studio更改項目使用的JDK(詳細步驟)
本文介紹了如何在Android Studio中修改Gradle和JDK的配置步驟,包括打開設(shè)置、進入Gradle設(shè)置、修改JDK路徑、保存并生效等,感興趣的朋友跟隨小編一起看看吧2024-11-11Spring Boot 整合 ShedLock 處理定時任務(wù)重復(fù)執(zhí)行的問題小結(jié)
ShedLock是解決分布式系統(tǒng)中定時任務(wù)重復(fù)執(zhí)行問題的Java庫,通過在數(shù)據(jù)庫中加鎖,確保只有一個節(jié)點在指定時間執(zhí)行任務(wù),它與SpringScheduler、Quartz等框架結(jié)合使用,本文介紹Spring Boot 整合 ShedLock 處理定時任務(wù)重復(fù)執(zhí)行的問題,感興趣的朋友一起看看吧2025-02-02詳解SpringMVC加載配置Properties文件的幾種方式
這篇文章主要介紹了詳解SpringMVC加載配置Properties文件的幾種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02Spring+Quartz實現(xiàn)動態(tài)任務(wù)調(diào)度詳解
這篇文章主要介紹了Spring+Quartz實現(xiàn)動態(tài)任務(wù)調(diào)度詳解,最近經(jīng)?;趕pring?boot寫定時任務(wù),并且是使用注解的方式進行實現(xiàn),分成的方便將自己的類注入spring容器,需要的朋友可以參考下2024-01-01