日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java this super代碼實(shí)例及使用方法總結(jié)

瀏覽:44日期:2022-09-03 18:15:35

這幾天看到類在繼承時(shí)會(huì)用到this和super,這里就做了一點(diǎn)總結(jié),與各位共同交流,有錯(cuò)誤請(qǐng)各位指正~

一、this

this是自身的一個(gè)對(duì)象,代表對(duì)象本身,可以理解為:指向?qū)ο蟊旧淼囊粋€(gè)指針。

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

1.普通的直接引用

這種就不用講了,this相當(dāng)于是指向當(dāng)前對(duì)象本身。

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

package com.demo;public class Person { private int age = 10; public Person(){ System.out.println('初始化年齡:'+age); } public int GetAge(int age){ this.age = age; return this.age; }}

package com.demo;public class Test1 { public static void main(String[] args) { Person Harry = new Person(); System.out.println('Harry’s age is '+Harry.GetAge(12)); }}

運(yùn)行結(jié)果:

初始化年齡:10Harry’s age is 12

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

這個(gè)和super放在一起講,見下面。

二、super

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

super也有三種用法:

1.普通的直接引用

與this類似,super相當(dāng)于是指向當(dāng)前對(duì)象的父類,這樣就可以用super.xxx來引用父類的成員。

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

package com.demo;public class Country { String name; void value() { name = 'China'; }}

package com.demo;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(); }}

運(yùn)行結(jié)果:

ShanghaiChina

可以看到,這里既調(diào)用了父類的方法,也調(diào)用了父類的變量。若不調(diào)用父類方法value(),只調(diào)用父類變量name的話,則父類name值為默認(rèn)值null。

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

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

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

package com.demo.test;public 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('父類·含一個(gè)參數(shù)的構(gòu)造方法: ' + 'A person’s name is ' + name); }// 構(gòu)造方法(2)}

package com.demo.test;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)用父類”含一個(gè)參數(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); }}

運(yùn)行結(jié)果:

父類·無參數(shù)構(gòu)造方法: A Person.子類·調(diào)用父類“無參數(shù)構(gòu)造方法“: A chinese coder.父類·含一個(gè)參數(shù)的構(gòu)造方法: A person’s name is codersai子類·調(diào)用父類”含一個(gè)參數(shù)的構(gòu)造方法“: his name is codersai父類·含一個(gè)參數(shù)的構(gòu)造方法: A person’s name is codersai子類·調(diào)用父類”含一個(gè)參數(shù)的構(gòu)造方法“: his name is codersai子類:調(diào)用子類具有相同形參的構(gòu)造方法:his age is 18

從本例可以看到,可以用super和this分別調(diào)用父類的構(gòu)造方法和本類中其他形式的構(gòu)造方法。

例子中Chinese類第三種構(gòu)造方法調(diào)用的是本類中第二種構(gòu)造方法,而第二種構(gòu)造方法是調(diào)用父類的,因此也要先調(diào)用父類的構(gòu)造方法,再調(diào)用本類中第二種,最后是重寫第三種構(gòu)造方法。

三、super 和 this 的異同

super(參數(shù)):調(diào)用基類中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句) this(參數(shù)):調(diào)用本類中另一種形成的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句) super:它引用當(dāng)前對(duì)象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時(shí)如:super.變量名 super.成員函數(shù)據(jù)名(實(shí)參) this:它代表當(dāng)前對(duì)象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來指明當(dāng)前對(duì)象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時(shí)需用this來指明成員變量名) 調(diào)用super()必須寫在子類構(gòu)造方法的第一行,否則編譯不通過。每個(gè)子類構(gòu)造方法的第一條語句,都是隱含地調(diào)用super(),如果父類沒有這種形式的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。 super()和this()類似,區(qū)別是,super()從子類中調(diào)用父類的構(gòu)造方法,this()在同一類內(nèi)調(diào)用其它方法。 super()和this()均需放在構(gòu)造方法內(nèi)第一行。 盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)。 this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會(huì)有super語句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語句,就失去了語句的意義,編譯器也不會(huì)通過。 this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。 從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

一、this

Java關(guān)鍵字this只能用于方法體內(nèi)。當(dāng)一個(gè)對(duì)象創(chuàng)建后,Java虛擬機(jī)(JVM)就會(huì)給這個(gè)對(duì)象分配一個(gè)引用自身的指針,這個(gè)指針的名字就是this。因此,this只能在類中的非靜態(tài)方法中使用,靜態(tài)方法和靜態(tài)的代碼塊中絕對(duì)不能出現(xiàn)this。并且this只和特定的對(duì)象關(guān)聯(lián),而不和類關(guān)聯(lián),同一個(gè)類的不同對(duì)象有不同的this。下面給出一個(gè)使用this的綜合實(shí)例,以便說明問題:

package com.demo.test;public class Testthis { private int number; private String username; private String password; private int x = 100; public Testthis(int n) { number = n; // 這個(gè)還可以寫為: this.number=n; } public Testthis(int i, String username, String password) { // 成員變量和參數(shù)同名,成員變量被屏蔽,用'this.成員變量'的方式訪問成員變量. this.username = username; this.password = password; } // 默認(rèn)不帶參數(shù)的構(gòu)造方法 public Testthis() { this(0, '未知', '空'); // 通過this調(diào)用另一個(gè)構(gòu)造方法 } public Testthis(String name) { this(1, name, '空'); // 通過this調(diào)用另一個(gè)構(gòu)造方法 } public static void main(String args[]) { Testthis t1 = new Testthis(); Testthis t2 = new Testthis('游客'); t1.outinfo(t1); t2.outinfo(t2); } private void outinfo(Testthis t) { System.out.println('-----------'); System.out.println(t.number); System.out.println(t.username); System.out.println(t.password); f(); // 這個(gè)可以寫為: this.f(); } private void f() { // 局部變量與成員變量同名,成員變量被屏蔽,用'this.成員變量'的方式訪問成員變量. int x; x = this.x++; System.out.println(x); System.out.println(this.x); } // 返回當(dāng)前實(shí)例的引用 private Testthis getSelf() { return this; }}

運(yùn)行結(jié)果如下:

-----------未知空101-----------游客空101

看著上面的例子,說明在什么情況下需要用到this:

第一、通過this調(diào)用另一個(gè)構(gòu)造方法,用法是this(參數(shù)列表),這個(gè)僅僅在類的構(gòu)造方法中,別的地方不能這么用。

第二、函數(shù)參數(shù)或者函數(shù)中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時(shí)要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。當(dāng)然,在沒有同名的情況下,可以直接用成員變量的名字,而不用this,用了也不為錯(cuò),呵呵。

第三、在函數(shù)中,需要引用該函數(shù)所屬類的當(dāng)前對(duì)象的時(shí)候,直接用this。其實(shí)這些用法總結(jié)都是從對(duì)“this是指向?qū)ο蟊旧淼囊粋€(gè)指針”這句話的更深入的理解而來的,死記不然容易忘記而且容易搞錯(cuò),要理解!

二、super

super關(guān)鍵字和this作用類似,使被屏蔽的成員變量或者成員方法變?yōu)榭梢?,或者說用來引用被屏蔽的成員變量和成員方法。不過super是用在子類中,目的是訪問直接父類中被屏蔽的成員,注意是直接父類(就是類之上最近的超類)。下面是一個(gè)綜合運(yùn)用super的例子,有兩個(gè)類:一個(gè)Father類,一個(gè)Father類的子類Son,通過這兩個(gè)類完全演示了super的用法,以下是代碼:

package com.demo.test;public class Father { public String v = 'Father'; public String x = '輸出了Father類的public成員變量x!!!'; public Father() { System.out.println('Father構(gòu)造方法被調(diào)用!'); } public Father(String v) { this.v = 'Father類的帶參數(shù)構(gòu)造方法!運(yùn)行了.'; } public void outinfo() { System.out.println('Father的outinfo方法被調(diào)用'); } public static void main(String[] args) { // TODO 自動(dòng)生成方法存根 }}

package com.demo.test;public class Son extends Father { public String v = 'Son'; public Son() { super(); // 調(diào)用超類的構(gòu)造方法,只能放到第一行. System.out.println('Son無參數(shù)構(gòu)造方法被調(diào)用!'); // super(); //錯(cuò)誤的,必須放到構(gòu)造方法體的最前面. } public Son(String str) { super(str); System.out.println('Son帶參數(shù)構(gòu)造方法被調(diào)用!'); } // 覆蓋了超類成員方法outinfo() public void outinfo() { System.out.println('Son的outinfo()方法被調(diào)用'); } public void test() { String v = '哈哈哈哈!'; // 局部變量v覆蓋了成員變量v和超類變量v System.out.println('------1-----'); System.out.println(v); // 輸出局部變量v System.out.println(this.v); // 輸出(子類)成員變量v System.out.println(super.v); // 輸出超類成員變量v System.out.println('------2-----'); System.out.println(x); // 輸出超類成員變量v,子類繼承而來 System.out.println(super.x); // 輸出超類成員變量v System.out.println('------3-----'); outinfo(); // 調(diào)用子類的outinfo()方法 this.outinfo(); // 調(diào)用子類的outinfo()方法 super.outinfo(); // 調(diào)用父類的outinfo()方法 } public static void main(String[] args) { new Son().test(); }}

運(yùn)行結(jié)果:

Father構(gòu)造方法被調(diào)用!Son無參數(shù)構(gòu)造方法被調(diào)用!------1-----哈哈哈哈!SonFather------2-----輸出了Father類的public成員變量x!!!輸出了Father類的public成員變量x!!!------3-----Son的outinfo()方法被調(diào)用Son的outinfo()方法被調(diào)用Father的outinfo方法被調(diào)用

說明:此例子僅僅為了說明super的用法,實(shí)際在設(shè)計(jì)類的時(shí)候一般都盡可能私有(private)化。

通過上面的例子,下面總結(jié)一下super的用法:

第一、在子類構(gòu)造方法中要調(diào)用父類的構(gòu)造方法,用“super(參數(shù)列表)”的方式調(diào)用,參數(shù)不是必須的。同時(shí)還要注意的一點(diǎn)是:“super(參數(shù)列表)”這條語句只能用在子類構(gòu)造方法體中的第一行。

第二、當(dāng)子類方法中的局部變量或者子類的成員變量與父類成員變量同名時(shí),也就是子類局部變量覆蓋父類成員變量時(shí),用“super.成員變量名”來引用父類成員變量。當(dāng)然,如果父類的成員變量沒有被覆蓋,也可以用“super.成員變量名”來引用父類成員變量,不過這是不必要的。

第三、當(dāng)子類的成員方法覆蓋了父類的成員方法時(shí),也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時(shí),用“super.方法名(參數(shù)列表)”的方式訪問父類的方法。

this、super的用法也不過這些,只有理解了其中的原理,才不會(huì)跌入陷阱!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品日韩在线| 精品国产亚洲一区二区在线观看| 精品久久网站| 久久亚洲人体| 精品精品久久| 精品国产中文字幕第一页| 欧美激情aⅴ一区二区三区| 久久99久久久精品欧美| 麻豆国产精品一区二区三区| 国产在线观看91一区二区三区| 久久伊人亚洲| 精品黄色一级片| 精品亚洲精品| 久久电影tv| 欧美美女一区| 香蕉视频成人在线观看| 欧美综合二区| 日韩国产在线观看| 国产精品观看| 黄色欧美在线| 久久久国产精品一区二区中文| 久久天堂精品| 亚洲免费影院| 91麻豆精品| 精品免费在线| 日韩av首页| 亚洲深夜av| 欧美日本久久| 欧洲一区二区三区精品| 亚洲少妇在线| 国产探花在线精品| 国产一区二区三区不卡av| 久久蜜桃精品| 蜜臀国产一区二区三区在线播放| 青青国产91久久久久久| 色婷婷综合网| 国产亚洲精品v| 欧美一区二区三区久久精品| 国产一区二区三区免费在线| 91高清一区| 日本在线观看不卡视频| 精品一区二区三区中文字幕| 亚洲婷婷免费| 日韩欧美久久| 国产一区二区色噜噜| 尤物在线精品| 久久99视频| 国产一区日韩欧美| 欧美有码在线| 九九精品调教| 亚洲资源在线| 高清一区二区三区| 日韩一区精品字幕| 精品美女在线视频| 欧美 日韩 国产精品免费观看| 亚洲男人在线| 在线手机中文字幕| 日韩中文字幕视频网| 国产h片在线观看| 免费在线成人网| 国产成人精品亚洲线观看| 蜜桃视频免费观看一区| 精品免费在线| 日韩精品免费视频一区二区三区 | 免费精品视频在线| 久久精品国产久精国产| 免费美女久久99| 欧美天堂视频| 欧美久久香蕉| 黄页网站一区| 日本а中文在线天堂| 日韩精品成人| 欧美日韩在线二区| 国产欧美一级| 免费在线观看成人| 亚洲黄色中文字幕| 日韩高清中文字幕一区| 激情婷婷久久| 成人免费一区| 国产精品一线天粉嫩av| 性一交一乱一区二区洋洋av| 激情黄产视频在线免费观看| 亚洲精品免费观看| 激情婷婷欧美| 日本一区二区免费高清| 日韩精品91亚洲二区在线观看| 久久精品中文| 97精品国产| 国产精品久久久久9999高清| 日韩中文字幕av电影| 青青青免费在线视频| 国产日韩一区二区三区在线播放| 午夜亚洲一区| 一区二区小说| 精品视频在线一区二区在线| 综合色一区二区| 欧美精品激情| 亚洲黑丝一区二区| 欧美日韩视频网站| 国产在线日韩精品| 欧美激情福利| 国产亚洲人成a在线v网站| 四虎精品永久免费| 亚洲少妇诱惑| 亚洲精品888| 日本美女一区| 都市激情国产精品| 精品国产乱码久久久久久1区2匹| 国产精品视频一区二区三区综合| 日韩中文字幕视频网| 一区二区三区网站| 三级亚洲高清视频| 视频精品一区二区| 美女日韩在线中文字幕| 黄色欧美日韩| 中文一区二区| 亚洲自拍另类| 久久国产精品99国产| 国产一级久久| 亚洲一区二区三区高清| 欧美日韩国产一区精品一区| 婷婷久久一区| 欧美日韩国产高清电影| 2023国产精品久久久精品双| 蜜桃tv一区二区三区| 亚洲福利久久| 亚洲深夜影院| 免费在线成人网| 日韩欧美在线精品| 日韩av一区二区三区| 国产免费播放一区二区| 国产激情综合| 国产一区三区在线播放| 一区二区三区四区日本视频| 国产在线观看www| 日本а中文在线天堂| 亚洲一级少妇| 红桃视频国产精品| 蜜臀av一区二区三区| 日韩高清一区| 国产精品xxxav免费视频| 老司机精品视频网| 伊人网在线播放| 五月天激情综合网| 免费国产亚洲视频| 日韩精品导航| 老司机精品视频网| 日韩专区精品| 伊人久久亚洲热| 日韩一区二区三区四区五区| 国产欧美一区二区三区米奇| 久久精品免费看| 亚洲va中文在线播放免费| 婷婷精品进入| 日韩欧美美女在线观看| 久久精品亚洲一区二区| 亚洲不卡系列| 丝袜国产日韩另类美女| 欧美一区免费| 日韩欧美网址| av不卡在线看| 国产欧美久久一区二区三区| 鲁鲁在线中文| 蜜桃久久精品一区二区| 国产精品亚洲综合在线观看| 精品九九在线| 亚洲国产专区校园欧美| 亚洲人成在线影院| 久草精品视频| 亚洲精品一区二区妖精| 欧美亚洲二区| 成人精品亚洲| 日韩综合小视频| 美女福利一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频 | 日本一区二区免费高清| 激情五月综合网| 欧美中文高清| 日韩大片在线观看| 免费观看在线色综合| 麻豆一区二区99久久久久| 久久精品国语| 7m精品国产导航在线| 色婷婷精品视频| 日韩高清一区| 亚洲大片在线| 国产精品九九| 激情六月综合| 国产精品2区| 99视频一区| 韩国女主播一区二区三区| 视频在线在亚洲| 福利在线免费视频| 视频精品一区二区| 欧美男人天堂| 欧美视频精品全部免费观看| 欧美手机在线| 麻豆一区二区三| 中文在线一区| 国产精品专区免费|