Java面試題之this 和 super 的區(qū)別解析
一、什么是this 和 super
1.this關(guān)鍵字
this
關(guān)鍵字代表當(dāng)前對(duì)象的引用,它指向調(diào)用當(dāng)前方法的對(duì)象。在類的方法中,使用 this 可以明確地訪問當(dāng)前對(duì)象的屬性和方法,尤其是在方法參數(shù)與類的成員變量同名的情況下, this 可以避免歧義。
2.super關(guān)鍵字
super
關(guān)鍵字用于訪問父類的成員,包括父類的屬性、方法和構(gòu)造函數(shù)。當(dāng)子類中存在與父類同名的成員時(shí),通過 super 可以訪問父類的同名成員,避免子類對(duì)父類成員的隱藏和覆蓋帶來的訪問不便。
二、this 和 super 的區(qū)別
當(dāng)問到什么和什么的區(qū)別時(shí),我們就要從他們的相同點(diǎn)中去找到不同的地方
【相同點(diǎn)】
- 都是Java中的關(guān)鍵字
- 只能在類的
非靜態(tài)方法
中使用,用來訪問非靜態(tài)成員方法和字段,因?yàn)殪o態(tài)的是不依賴對(duì)象的- 在構(gòu)造方法中調(diào)用時(shí),必須是構(gòu)造方法中的第一條語句,并且不能同時(shí)存在
【不同點(diǎn)】
對(duì)比維度 | this 關(guān)鍵字 | super 關(guān)鍵字 |
---|---|---|
本質(zhì)含義 | 指向當(dāng)前對(duì)象的引用 | 指向父類對(duì)象的引用 |
訪問屬性 | 訪問當(dāng)前對(duì)象的屬性 | 訪問父類的屬性 |
調(diào)用方法 | 調(diào)用當(dāng)前對(duì)象的方法 | 調(diào)用父類的方法 |
調(diào)用構(gòu)造函數(shù) | 調(diào)用本類的其他構(gòu)造函數(shù) | 調(diào)用父類的構(gòu)造函數(shù) |
使用場(chǎng)景 | 解決成員變量與局部變量重名問題、鏈?zhǔn)秸{(diào)用構(gòu)造函數(shù) | 子類重寫父類方法后仍需調(diào)用父類方法、子類構(gòu)造函數(shù)調(diào)用父類構(gòu)造函數(shù) |
存在限制 | 不能在靜態(tài)方法和靜態(tài)代碼塊中使用 | 不能在靜態(tài)方法和靜態(tài)代碼塊中使用 |
三、代碼示例
父類
public class Base { public int a = 10; public int b = 20; }
子類
public class Derived extends Base{ public int a = 100; public int b = 200; public void method(){ System.out.println(this.a); System.out.println(this.b); System.out.println(super.a); System.out.println(super.b); } }
調(diào)用子類函數(shù)
public class Test { public static void main(String[] args) { Derived derived = new Derived(); derived.method(); } }
執(zhí)行結(jié)果
四、注意事項(xiàng)
- 靜態(tài)環(huán)境限制: this 和 super都不能在靜態(tài)方法和靜態(tài)代碼塊中使用,因?yàn)殪o態(tài)成員屬于類本身,而不是某個(gè)具體的對(duì)象,不存在當(dāng)前對(duì)象和父類對(duì)象的概念。
- 構(gòu)造函數(shù)調(diào)用順序: 在子類的構(gòu)造函數(shù)中,
super()
(調(diào)用父類無參構(gòu)造函數(shù))或super(參數(shù))
(調(diào)用父類有參構(gòu)造函數(shù))必須是構(gòu)造函數(shù)的第一行代碼,否則會(huì)編譯報(bào)錯(cuò)。而 this() 調(diào)用本類其他構(gòu)造函數(shù)時(shí)同樣需要放在第一行,所以super() 和 this() 不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)中。
五、總結(jié)
this 和 super 雖然都是Java中的關(guān)鍵字,但它們的作用和使用場(chǎng)景有著明顯的區(qū)別。this主要用于操作當(dāng)前對(duì)象的屬性和方法,解決變量重名和構(gòu)造函數(shù)鏈?zhǔn)秸{(diào)用問題;而 super 則專注于訪問父類的成員,處理子類與父類成員的繼承和覆蓋關(guān)系。掌握好這兩個(gè)關(guān)鍵字的使用,不僅能夠提升我們的代碼質(zhì)量,還能在Java面試中脫穎而出。
到此這篇關(guān)于Java面試題this 和 super 的區(qū)別的文章就介紹到這了,更多相關(guān)java this和super區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring事件發(fā)布監(jiān)聽,順序監(jiān)聽,異步監(jiān)聽方式
這篇文章主要介紹了Spring事件發(fā)布監(jiān)聽,順序監(jiān)聽,異步監(jiān)聽方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12RabbitMQ消息單獨(dú)與批量的TTL詳細(xì)介紹
這篇文章主要介紹了RabbitMQ消息單獨(dú)與批量的TTL,TTL全名是Time To Live存活時(shí)間,表示當(dāng)消息由生產(chǎn)端存入MQ當(dāng)中的存活時(shí)間,當(dāng)時(shí)間到達(dá)的時(shí)候還未被消息就會(huì)被自動(dòng)清除,感興趣的同學(xué)可以參考下文2023-05-05靜態(tài)方法中調(diào)用Spring注入過程解析
這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java BufferedWriter BufferedReader 源碼分析
本文是關(guān)于Java BufferedWriter ,BufferedReader 簡介、分析源碼 對(duì)Java IO 流深入了解,希望看到的同學(xué)對(duì)你有所幫助2016-07-07詳解Spring3.x 升級(jí)至 Spring4.x的方法
本篇文章主要介紹了詳解Spring3.x 升級(jí)至 Spring4.x的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04構(gòu)建SpringBoot+MyBatis+Freemarker的項(xiàng)目詳解
在本篇內(nèi)容里小編給大家整理的是關(guān)于構(gòu)建SpringBoot+MyBatis+Freemarker的項(xiàng)目的具體步驟以及實(shí)例代碼,需要的朋友們參考下。2019-06-06