您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在Java項(xiàng)目中使用繼承構(gòu)造器,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
默認(rèn)構(gòu)造器
先看一段簡(jiǎn)單的測(cè)試代碼:
package com.my.pac13; /*繼承中的構(gòu)造*/ public class Person { Person(){ System.out.println("Person()"); } } class Student extends Person{ Student(){ System.out.println("Student()"); } } class PrimaryStudent extends Student{ PrimaryStudent(){ //super(); System.out.println("PrimaryStudent()"); } public static void main(String[] args) { //創(chuàng)建了PrimaryStudent對(duì)象 new PrimaryStudent(); } } /* Person() Student() PrimaryStudent() */
關(guān)于構(gòu)造器,我們前面提到,任何沒(méi)有顯式構(gòu)造器的類都存在著一個(gè)無(wú)參數(shù)的默認(rèn)構(gòu)造器。我們上面的例子在默認(rèn)構(gòu)造器中加入了打印輸出,以便理解。
可以看到的是:
在創(chuàng)建PrimaryStudent時(shí),他的直接父類Student和間接父類Person中的構(gòu)造器都被調(diào)用了,而且可以看到,是"自上而下"的。
父類在子類構(gòu)造器可以訪問(wèn)它之前,就已經(jīng)完成了初始化的操作。
若子類沒(méi)有顯式調(diào)用父類的構(gòu)造器,則自動(dòng)調(diào)用父類的默認(rèn)(無(wú)參)構(gòu)造器。
帶參數(shù)的構(gòu)造器
前面的代碼中,每個(gè)類都含有默認(rèn)的構(gòu)造器,創(chuàng)建子類對(duì)象時(shí),是自上而下,且子類會(huì)默認(rèn)調(diào)用父類的無(wú)參構(gòu)造器。那么,假設(shè)父類正好沒(méi)有無(wú)參構(gòu)造器或者你正想調(diào)用父類的帶參構(gòu)造器,這時(shí)就需要我們的super關(guān)鍵字。(super關(guān)鍵字之后還會(huì)進(jìn)行總結(jié))
我們直接在原來(lái)的基礎(chǔ)上稍作修改,并進(jìn)行測(cè)試。
package com.my.pac13; /*調(diào)用基類構(gòu)造器是子類構(gòu)造器中要做的第一件事*/ public class Person { //沒(méi)有默認(rèn)構(gòu)造器 Person(String name){ System.out.println("Person()\t"+name); } } class Student extends Person{ //也沒(méi)有默認(rèn)構(gòu)造器,且用super顯式調(diào)用 Student(String n){ //super關(guān)鍵字調(diào)用父類的構(gòu)造器 super(n); System.out.println("一參數(shù)Student\t"+n); } Student(String n,String m){ //this關(guān)鍵字調(diào)用同一類中重載的構(gòu)造器 this(n); System.out.println("二參數(shù)student()\t"+m); } } class PrimaryStudent extends Student{ //隱式調(diào)用父類構(gòu)無(wú)參數(shù)構(gòu)造器,但是父類沒(méi)有,所以要用super顯式調(diào)用 PrimaryStudent(){ //沒(méi)有下面的語(yǔ)句會(huì)報(bào)錯(cuò) super("hello"); System.out.println("PrimaryStudent()"); } } class ExtendsTest{ public static void main(String[] args) { new Person("the shy"); System.out.println("***********"); new Student("rookie"); System.out.println("***********"); new Student("the shy","rookie"); System.out.println("***********"); new PrimaryStudent(); System.out.println("***********"); } } /* Person() the shy *********** Person() rookie 一參數(shù)Student rookie *********** Person() the shy 一參數(shù)Student the shy 二參數(shù)student() rookie *********** Person() hello 一參數(shù)Student hello PrimaryStudent() *********** */
this是正在創(chuàng)建的對(duì)象,用于調(diào)用同一類中重載的構(gòu)造器,可以參看我之前的文章:Java關(guān)鍵字之this。
super在調(diào)用構(gòu)造器時(shí),使用方法和this相似。(但super和this本身有本質(zhì)的不同,super并不是一個(gè)對(duì)象的引用?。。。?/p>
super和this語(yǔ)句都必須出現(xiàn)在第一行,也就是說(shuō)一個(gè)構(gòu)造器中只能有其中之一。
子類調(diào)用父類構(gòu)造器
無(wú)論是否使用super語(yǔ)句來(lái)調(diào)用父類構(gòu)造器的初始化代碼,子類構(gòu)造器總是會(huì)事先調(diào)用父類構(gòu)造器!這是一定要記住的!
子類構(gòu)造器A在第一行顯式使用super調(diào)用父類構(gòu)造器B,格式super(參數(shù)列表),根據(jù)參數(shù)列表選擇對(duì)應(yīng)的父類構(gòu)造器。
//父類 Person(String name){ System.out.println("Person()\t"+name); } //子類 Student(String n){ //super關(guān)鍵字調(diào)用父類的構(gòu)造器 super(n); System.out.println("一參數(shù)Student\t"+n); }
子類構(gòu)造器A先用this調(diào)用本類重載的構(gòu)造器B,然后B調(diào)用父類構(gòu)造器。
//父類 Person(String name){ System.out.println("Person()\t"+name); } //子類 Student(String n){ //super關(guān)鍵字調(diào)用父類的構(gòu)造器 super(n); System.out.println("一參數(shù)Student\t"+n); } Student(String n,String m){ //this關(guān)鍵字調(diào)用同一類中重載的構(gòu)造器 this(n); System.out.println("二參數(shù)student()\t"+m); }
子類構(gòu)造器中沒(méi)有super和this時(shí),系統(tǒng)會(huì)隱式調(diào)用父類的無(wú)參構(gòu)造器,要是沒(méi)有無(wú)參的,那就報(bào)錯(cuò)。
//隱式調(diào)用父類構(gòu)無(wú)參數(shù)構(gòu)造器,但是父類沒(méi)有,所以要用super顯式調(diào)用 PrimaryStudent(){ //沒(méi)有下面的語(yǔ)句會(huì)報(bào)錯(cuò) super("hello"); System.out.println("PrimaryStudent()"); }
上述內(nèi)容就是如何在Java項(xiàng)目中使用繼承構(gòu)造器,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。