Java面試題之this 和 super 的區(qū)別解析
一、什么是this 和 super
1.this關鍵字
this關鍵字代表當前對象的引用,它指向調用當前方法的對象。在類的方法中,使用 this 可以明確地訪問當前對象的屬性和方法,尤其是在方法參數與類的成員變量同名的情況下, this 可以避免歧義。
2.super關鍵字
super 關鍵字用于訪問父類的成員,包括父類的屬性、方法和構造函數。當子類中存在與父類同名的成員時,通過 super 可以訪問父類的同名成員,避免子類對父類成員的隱藏和覆蓋帶來的訪問不便。
二、this 和 super 的區(qū)別
當問到什么和什么的區(qū)別時,我們就要從他們的相同點中去找到不同的地方
【相同點】
- 都是Java中的關鍵字
- 只能在類的
非靜態(tài)方法中使用,用來訪問非靜態(tài)成員方法和字段,因為靜態(tài)的是不依賴對象的- 在構造方法中調用時,必須是構造方法中的第一條語句,并且不能同時存在
【不同點】
| 對比維度 | this關鍵字 | super關鍵字 |
|---|---|---|
| 本質含義 | 指向當前對象的引用 | 指向父類對象的引用 |
| 訪問屬性 | 訪問當前對象的屬性 | 訪問父類的屬性 |
| 調用方法 | 調用當前對象的方法 | 調用父類的方法 |
| 調用構造函數 | 調用本類的其他構造函數 | 調用父類的構造函數 |
| 使用場景 | 解決成員變量與局部變量重名問題、鏈式調用構造函數 | 子類重寫父類方法后仍需調用父類方法、子類構造函數調用父類構造函數 |
| 存在限制 | 不能在靜態(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);
}
}調用子類函數
public class Test {
public static void main(String[] args) {
Derived derived = new Derived();
derived.method();
}
}執(zhí)行結果

四、注意事項
- 靜態(tài)環(huán)境限制: this 和 super都不能在靜態(tài)方法和靜態(tài)代碼塊中使用,因為靜態(tài)成員屬于類本身,而不是某個具體的對象,不存在當前對象和父類對象的概念。
- 構造函數調用順序: 在子類的構造函數中,
super()(調用父類無參構造函數)或super(參數)(調用父類有參構造函數)必須是構造函數的第一行代碼,否則會編譯報錯。而 this() 調用本類其他構造函數時同樣需要放在第一行,所以super() 和 this() 不能同時出現在一個構造函數中。
五、總結
this 和 super 雖然都是Java中的關鍵字,但它們的作用和使用場景有著明顯的區(qū)別。this主要用于操作當前對象的屬性和方法,解決變量重名和構造函數鏈式調用問題;而 super 則專注于訪問父類的成員,處理子類與父類成員的繼承和覆蓋關系。掌握好這兩個關鍵字的使用,不僅能夠提升我們的代碼質量,還能在Java面試中脫穎而出。
到此這篇關于Java面試題this 和 super 的區(qū)別的文章就介紹到這了,更多相關java this和super區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring事件發(fā)布監(jiān)聽,順序監(jiān)聽,異步監(jiān)聽方式
這篇文章主要介紹了Spring事件發(fā)布監(jiān)聽,順序監(jiān)聽,異步監(jiān)聽方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java BufferedWriter BufferedReader 源碼分析
本文是關于Java BufferedWriter ,BufferedReader 簡介、分析源碼 對Java IO 流深入了解,希望看到的同學對你有所幫助2016-07-07
構建SpringBoot+MyBatis+Freemarker的項目詳解
在本篇內容里小編給大家整理的是關于構建SpringBoot+MyBatis+Freemarker的項目的具體步驟以及實例代碼,需要的朋友們參考下。2019-06-06

