大白話說清楚 Java 中的 this 和 super 關(guān)鍵字!
點擊上方“藍色字體”,選擇“設(shè)為星標(biāo)”
做積極的人,而不是積極廢人!
今天就用最通俗易懂的大白話來聊一聊 Java 中的 this 和 super 以及 this() 和 super()。
1、this關(guān)鍵字
package com.cj.study.thissuper;
public class Student{
public String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
上述代碼是很常見的javabean的定義,里邊經(jīng)常會出現(xiàn)this這個關(guān)鍵字
那有思考過為什么這里需要用this這個關(guān)鍵字嗎?

把set方法里的this.name的this去掉,變成了name=name,就會發(fā)現(xiàn)個問題,這2個name都是局部變量的name,這就變成了局部變量給局部變量賦值了, 但是咱們是想給對象的name賦值,并不是想給局部變量賦值,由于名稱一樣導(dǎo)致區(qū)分不出來了。
所以必須用this來區(qū)分一下;當(dāng)然如果兩個不重名的話,name=nnn 這種的不加this是沒問題的,這是因為它是先在局部找變量,如果找到了就用局部變量,沒找到就去找全局變量。
那這個this到底是啥呢?
this是當(dāng)前對象的引用,就是說當(dāng)前用構(gòu)造函數(shù)建的對象是誰,這個this就代表誰,它是一個引用
另外一個問題,如果構(gòu)造函數(shù)想調(diào)用另一個構(gòu)造函數(shù)該怎么辦呢?
這個時候就需要使用this()了

注意:如果在構(gòu)造函數(shù)里調(diào)用其他重載的構(gòu)造函數(shù)時,則,被調(diào)用的那個構(gòu)造函數(shù)必須放在代碼的第一行。
下邊是示例:
正確的

錯誤的

2、super關(guān)鍵字


上述例子是父類里定義了一個字段是num,子類里沒有定義,所以最后的輸出結(jié)果是showNum=4
但是如果子類也定義了一個num值為5,那打印出來的一定是5,因為在調(diào)用成員(成員變量和成員方法)時如果不特殊標(biāo)明,前邊其實默認(rèn)省略了this,他默認(rèn)調(diào)用的是子類的。
但是如果這時候我就想用父類的不想用子類的,怎么辦
這時候又出現(xiàn)了區(qū)分不出來的情況,所以要用super來標(biāo)明你要調(diào)用父類的,而不是子類的

當(dāng)只有父類有,子類沒有的情況下,則調(diào)的是父類的(因為子類繼承了父類,子類就擁有了父類出了私有外的所有東西)
當(dāng)父類和子類都有的情況下,默認(rèn)調(diào)用的是子類的,但是用super標(biāo)明了以后調(diào)的是父類的

如上圖所示,this和super的引用是這樣指向?qū)ο蟮某蓡T變量和方法。
this指向了不僅父類可繼承的成員變量和可繼承的方法外,它還指向了子類的成員變量和方法
而super僅僅只是指向了子類對象中從父類繼承的成員變量和方法。
那如果子類 構(gòu)造函數(shù)想調(diào)用父類的構(gòu)造函數(shù), 怎么辦?
這時候可以用super();
注意: 在子類的構(gòu)造函數(shù)里都必須去調(diào)用父類的構(gòu)造函數(shù),你不寫其實第一行都有一個隱式的super();


如果父類里不定義無參的構(gòu)造的話子類的構(gòu)造函數(shù)會報錯,所以說明在子類的構(gòu)造函數(shù)默認(rèn)的都有一句隱式的super();
你的構(gòu)造函數(shù)里默認(rèn)的都有一個隱式的super();去調(diào)用父類無參的構(gòu)造,但是如果你的構(gòu)造函數(shù)里不想調(diào)用默認(rèn)的父類無參構(gòu)造,而是想調(diào)用父類其他的構(gòu)造函數(shù),則你可以顯式的寫出來,而且如果你寫了則調(diào)用父類的supper(xxx) 必須放在第一行。

以上就是對this和super的一些總結(jié),希望對大家有所幫助!
作者:嗑嗑磕嗑瓜子的貓
鏈接:blog.csdn.net/ju_362204801/article/details/91046744
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
- end -
用心分享面試知識,做有溫度的攻城獅
每天記得對自己說:你是最棒的!
往期推薦:
每一個“好看”,都是對我們最大的幫助

