從屌絲到架構(gòu)師的飛越(面向?qū)ο笃?this super

在編程語言里面每一個定義的方法里慕趴,都會有一個this關(guān)鍵字砸王,這個this關(guān)鍵不是由在那兒定義來決定的,而是由誰來執(zhí)行的決定的画株。這是判斷this關(guān)鍵。

比如說吃飯這個方法它是由上帝來定義的啦辐,世界上所有的人來執(zhí)行谓传。吃飯這個行為發(fā)生的時候,主體就是在吃飯的這個人芹关,也就是要有人執(zhí)行吃飯這個行為续挟。 有時候我們需要在一個行為(方法)里,能明確知道這個行為是誰來執(zhí)行的侥衬,確切的說就是我要知道誰在吃飯诗祸。

在JAVA類中使用super來引用父類的成分,如果一個類從另外一個類繼承轴总,我們new這個子類的實例對象的時候咏花,這個子類對象里面會有一個父類對象。怎么去引用里面的父類對象呢壁顶?使用super來引用副砍,super是當前對象里面的父對象的引用。

二.知識點介紹

1漂佩、this

2脖含、Super

3罪塔、This/super區(qū)別

三.上課對應(yīng)視頻的說明文檔

1、this

this是自身的一個對象养葵,代表對象本身征堪,可以理解為:指向?qū)ο蟊旧淼囊粋€指針。

this的用法在java中大體可以分為3種:

(1)普通的直接引用

這種就不用講了关拒,this相當于是指向當前對象本身佃蚜。

代碼示例:

public class Hello {

String s = "Hello";

public Hello(String s1) {

System.out.println("s = " + s1);

//this當前對象,調(diào)用s屬性

System.out.println("1 -> this.s = " + this.s);

this.s = s1;//把參數(shù)值賦給成員變量着绊,成員變量的值改變

System.out.println("2 -> this.s = " + this.s);

}

public static void main(String[] args) {

Hello x = new Hello("HelloWorld!");

System.out.println("s=" + x.s);//驗證成員變量值的改變

}

}

運行結(jié)果:

s = HelloWorld!

1 -> this.s = Hello

2 -> this.s = HelloWorld!

s=HelloWorld!

(2)形參與成員名字重名谐算,用this來區(qū)分:

代碼示例:

class Person {

private int age = 10;

public Person(){

System.out.println("初始化年齡:"+age);

}

public int GetAge(int age){

this.age = age;

return this.age;

}

}

public class test1 {

public static void main(String[] args) {

Person Harry = new Person();

System.out.println("Harry's age is "+Harry.GetAge(12));

}

}? ? ? ?

(3)引用構(gòu)造函數(shù)

這個和super放在一起講,見下面归露。

(4)有時候洲脂,我們會用到一些內(nèi)部類和匿名類,如事件處理剧包。當在匿名類中用this時恐锦,這個this則指的是匿名類或內(nèi)部類本身。這時如果我們要使用外部類的方法和變量的話疆液,則應(yīng)該加上外部類的類名一铅。(此案例如果不明白,后面我們會有對應(yīng)的知識講解堕油,可忽視)

代碼示例:

public class HelloB {

int i = 1;

public HelloB() {

Thread thread = new Thread() {

public void run() {

for (int j=0;j<20;j++) {

HelloB.this.run();//調(diào)用外部類的方法

try {

sleep(1000);

} catch (InterruptedException ie) {

}

}

}

}; // 注意這里有分號

thread.start();

}

public void run() {

System.out.println("i = " + i);

i++;

}

public static void main(String[] args) throws Exception {

new HelloB();

}

}

(5)this同時傳遞多個參數(shù)

代碼示例:

public class TestClass {

int x;

int y;

static void showtest(TestClass tc) {//實例化對象

System.out.println(tc.x + " " + tc.y);

}

void seeit() {

showtest(this);

}

public static void main(String[] args) {

TestClass p = new TestClass();

p.x = 9;

p.y = 10;

p.seeit();

}

}

2潘飘、super

super可以理解為是指向自己超(父)類對象的一個指針,而這個超類指的是離自己最近的一個父類馍迄。

super也有三種用法:

(1)普通的直接引用

與this類似福也,super相當于是指向當前對象的父類,這樣就可以用super.xxx來引用父類的成員攀圈。

(2)子類中的成員變量或方法與父類中的成員變量或方法同名

代碼示例:

class Country {

String name;

void value() {

name = "China";

}

}

public class City extends Country {

String name;

void value() {

name = "Shanghai";

super.value();? ? ? //調(diào)用父類的方法

System.out.println(name);

System.out.println(super.name);

}

public static void main(String[] args) {

City c=new City();

c.value();

}

}

運行結(jié)果:

Shanghai

China

可以看到暴凑,這里既調(diào)用了父類的方法,也調(diào)用了父類的變量赘来。若不調(diào)用父類方法value()现喳,只調(diào)用父類變量name的話,則父類name值為默認值null犬辰。

(3)引用構(gòu)造函數(shù)

super(參數(shù)):調(diào)用父類中的某一個構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)嗦篱。

this(參數(shù)):調(diào)用本類中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)。

代碼示例:

class Person {?

public static void prt(String s) {?

System.out.println(s);?

}?

Person() {?

prt("父類·無參數(shù)構(gòu)造方法: "+"A Person.");?

}//構(gòu)造方法(1)?

Person(String name) {?

prt("父類·含一個參數(shù)的構(gòu)造方法: "+"A person's name is " + name);?

}//構(gòu)造方法(2)?

}?

public class Chinese extends Person {?

Chinese() {?

super(); // 調(diào)用父類構(gòu)造方法(1)?

prt("子類·調(diào)用父類”無參數(shù)構(gòu)造方法“: "+"A chinese coder.");?

}?

Chinese(String name) {?

super(name);// 調(diào)用父類具有相同形參的構(gòu)造方法(2)?

prt("子類·調(diào)用父類”含一個參數(shù)的構(gòu)造方法“: "+"his name is " + name);?

}?

Chinese(String name, int age) {?

this(name);// 調(diào)用具有相同形參的構(gòu)造方法(3)?

prt("子類:調(diào)用子類具有相同形參的構(gòu)造方法:his age is " + age);?

}?

public static void main(String[] args) {?

Chinese cn = new Chinese();?

cn = new Chinese("codersai");?

cn = new Chinese("codersai", 18);?

}?

}

3幌缝、this/super區(qū)別

(1) super(參數(shù)):調(diào)用基類中的某一個構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)

(2) this(參數(shù)):調(diào)用本類中另一種形成的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)

(3) super: 它引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù)灸促,基類與派生類中有相同成員定義時如:super.變量名? ? super.成員函數(shù)據(jù)名(實參)

(4) this:它代表當前對象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來指明當前對象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名浴栽,這時需用this來指明成員變量名)

(5) 調(diào)用super()必須寫在子類構(gòu)造方法的第一行荒叼,否則編譯不通過。每個子類構(gòu)造方法的第一條語句典鸡,都是隱含地調(diào)用super()被廓,如果父類沒有這種形式的構(gòu)造函數(shù),那么在編譯的時候就會報錯萝玷。

(6) super()和this()類似,區(qū)別是嫁乘,super()從子類中調(diào)用父類的構(gòu)造方法,this()在同一類內(nèi)調(diào)用其它方法球碉。

(7) super()和this()均需放在構(gòu)造方法內(nèi)第一行蜓斧。

(8) 盡管可以用this調(diào)用一個構(gòu)造器,但卻不能調(diào)用兩個汁尺。

(9) this和super不能同時出現(xiàn)在一個構(gòu)造函數(shù)里面法精,因為this必然會調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會有super語句的存在痴突,所以在同一個構(gòu)造函數(shù)里面有相同的語句,就失去了語句的意義狼荞,編譯器也不會通過辽装。

(10) this()和super()都指的是對象,所以相味,均不可以在static環(huán)境中使用拾积。包括:static變量,static方法,static語句塊丰涉。

(11) 從本質(zhì)上講拓巧,this是一個指向本對象的指針, 然而super是一個Java關(guān)鍵字。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一死,一起剝皮案震驚了整個濱河市肛度,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌投慈,老刑警劉巖承耿,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伪煤,居然都是意外死亡加袋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門抱既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來职烧,“玉大人,你說我怎么就攤上這事∈粗” “怎么了跋理?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恬总。 經(jīng)常有香客問我前普,道長,這世上最難降的妖魔是什么壹堰? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任拭卿,我火速辦了婚禮,結(jié)果婚禮上贱纠,老公的妹妹穿的比我還像新娘峻厚。我一直安慰自己,他們只是感情好谆焊,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布惠桃。 她就那樣靜靜地躺著,像睡著了一般辖试。 火紅的嫁衣襯著肌膚如雪辜王。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天罐孝,我揣著相機與錄音呐馆,去河邊找鬼。 笑死莲兢,一個胖子當著我的面吹牛汹来,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播改艇,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼收班,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谒兄?” 一聲冷哼從身側(cè)響起摔桦,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舵变,沒想到半個月后酣溃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡纪隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年赊豌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵咱。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碘饼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艾恼,我是刑警寧澤住涉,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钠绍,受9級特大地震影響舆声,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柳爽,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一媳握、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧磷脯,春花似錦蛾找、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俩功,卻和暖如春幻枉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绑雄。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工展辞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人万牺。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像洽腺,于是被迫代替她去往敵國和親脚粟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355