摘要:構(gòu)造方法名稱(chēng)必須和類(lèi)型保持一致。構(gòu)造方法沒(méi)有具體的返回值。構(gòu)造方法之間的調(diào)用,可以通過(guò)關(guān)鍵字來(lái)完成。由于構(gòu)造方法中使用了構(gòu)造方法就會(huì)壓棧,并將張三傳遞給。程序繼續(xù)執(zhí)行構(gòu)造方法中的這時(shí)會(huì)將賦值給成員屬性。賦值結(jié)束構(gòu)造方法彈棧。
01構(gòu)造方法引入
* A:構(gòu)造方法的引入 在開(kāi)發(fā)中經(jīng)常需要在創(chuàng)建對(duì)象的同時(shí)明確對(duì)象的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性信息。 那么,創(chuàng)建對(duì)象就要明確屬性值,那怎么解決呢?也就是在創(chuàng)建對(duì)象的時(shí)候就要做的事情,當(dāng)使用new關(guān)鍵字創(chuàng)建對(duì)象時(shí),怎么給對(duì)象的屬性初始化值呢? 這就要學(xué)習(xí)Java另外一門(mén)小技術(shù),構(gòu)造方法。 * B: 那什么是構(gòu)造方法呢? 從字面上理解即為構(gòu)建創(chuàng)造時(shí)用的方法,即就是對(duì)象創(chuàng)建時(shí)要執(zhí)行的方法。既然是對(duì)象創(chuàng)建時(shí)要執(zhí)行的方法,那么只要在new對(duì)象時(shí), 知道其執(zhí)行的構(gòu)造方法是什么,就可以在執(zhí)行這個(gè)方法的時(shí)候給對(duì)象進(jìn)行屬性賦值。02構(gòu)造方法作用
* A: 構(gòu)造方法的作用: 在new的同時(shí)給成員變量賦值,給對(duì)象屬性進(jìn)行初始化。 * B: 舉例: Perons p = new Person("張三",23); 在new 的時(shí)候給p對(duì)象的name屬性和age屬性進(jìn)行賦值,使這個(gè)對(duì)象的屬性有值。03構(gòu)造方法的定義和運(yùn)行特點(diǎn)
* A: 構(gòu)造方法定義 構(gòu)造方法的格式: 修飾符 構(gòu)造方法名(參數(shù)列表) { } * B: 構(gòu)造方法的體現(xiàn): 構(gòu)造方法沒(méi)有返回值類(lèi)型。也不需要寫(xiě)返回值。因?yàn)樗菫闃?gòu)建對(duì)象的,對(duì)象創(chuàng)建完,方法就執(zhí)行結(jié)束。 構(gòu)造方法名稱(chēng)必須和類(lèi)型保持一致。 構(gòu)造方法沒(méi)有具體的返回值。 構(gòu)造方法的代碼體現(xiàn): * C: 構(gòu)造方法舉例 class Person { // Person的成員屬性age和name private int age; private String name; // Person的構(gòu)造方法,擁有參數(shù)列表 Person(int a, String nm) { // 接受到創(chuàng)建對(duì)象時(shí)傳遞進(jìn)來(lái)的值,將值賦給成員屬性 age = a; name = nm; } } * D: 構(gòu)造方法運(yùn)行特點(diǎn): 在new 對(duì)象的時(shí)候自動(dòng)調(diào)用執(zhí)行。04默認(rèn)添加的構(gòu)造方法
* A: 每一class類(lèi)都必須有一個(gè)構(gòu)造方法,構(gòu)造方法不寫(xiě)也有。 編譯的時(shí)候,javac,系統(tǒng)會(huì)自動(dòng)檢查類(lèi)中是否有構(gòu)造方法,如果沒(méi)有編譯器就會(huì)自動(dòng)添加一個(gè)構(gòu)造方法 比如Person類(lèi), 編譯器添加一個(gè)無(wú)參構(gòu)造 public Person(){}05構(gòu)造方法的調(diào)用賦值
* A: 理解構(gòu)造方法的格式和基本功能之后,現(xiàn)在就要研究構(gòu)造方法是怎么執(zhí)行的呢?在創(chuàng)建對(duì)象的時(shí)候是如何初始化的呢? 構(gòu)造方法是專(zhuān)門(mén)用來(lái)創(chuàng)建對(duì)象的,也就是在new對(duì)象時(shí)要調(diào)用構(gòu)造方法?,F(xiàn)在來(lái)看看如何調(diào)用構(gòu)造方法。
* B: 案例 class Person { // Person的成員屬性age和name private int age; private String name; // Person的構(gòu)造方法,擁有參數(shù)列表 Person(int a, String nm) { // 接受到創(chuàng)建對(duì)象時(shí)傳遞進(jìn)來(lái)的值,將值賦給成員屬性 age = a; name = nm; } public void speak() { System.out.println("name=" + name + ",age=" + age); } } class PersonDemo { public static void main(String[] args) { // 創(chuàng)建Person對(duì)象,并明確對(duì)象的年齡和姓名 Person p2 = new Person(23, "張三"); p2.speak(); } } 上述代碼演示了創(chuàng)建對(duì)象時(shí)構(gòu)造方法的調(diào)用。即在創(chuàng)建對(duì)象時(shí),會(huì)調(diào)用與參數(shù)列表對(duì)應(yīng)的構(gòu)造方法06構(gòu)造方法的內(nèi)存
A:內(nèi)存加載的過(guò)程 有一個(gè)Person類(lèi), 創(chuàng)建Person 對(duì)象new Person() 1、首先會(huì)將main方法壓入棧中,執(zhí)行main方法中的 new Person(23,"張三"); 2、在堆內(nèi)存中分配一片區(qū)域,用來(lái)存放創(chuàng)建的Person對(duì)象,這片內(nèi)存區(qū)域會(huì)有屬于自己的內(nèi)存地址(0x88)。然后給成員變量進(jìn)行默認(rèn)初始化(name=null,age=0)。 3、執(zhí)行構(gòu)造方法中的代碼(age = a ; name = nm;),將變量a對(duì)應(yīng)的23賦值給age,將變量nm對(duì)應(yīng)的”張三賦值給name,這段代碼執(zhí)行結(jié)束后,成員變量age和name的值已經(jīng)改變。執(zhí)行結(jié)束之后構(gòu)造方法彈棧,Person對(duì)象創(chuàng)建完成。將Person對(duì)象的內(nèi)存地址0x88賦值給p2。
==============================第二節(jié)課開(kāi)始====================================
07構(gòu)造方法的重載* A:當(dāng)在描述事物時(shí),要不要在類(lèi)中寫(xiě)構(gòu)造方法呢?這時(shí)要根據(jù)描述事物的特點(diǎn)來(lái)確定,當(dāng)描述的事物在創(chuàng)建其對(duì)象時(shí)就要明確屬性的值,這時(shí)就需要在定義類(lèi)的時(shí)候書(shū)寫(xiě)帶參數(shù)的構(gòu)造方法。 * 若創(chuàng)建對(duì)象時(shí)不需要明確具體的數(shù)據(jù),這時(shí)可以不用書(shū)寫(xiě)構(gòu)造方法(不書(shū)寫(xiě)也有默認(rèn)的構(gòu)造方法)。 構(gòu)造方法的細(xì)節(jié): 1、一個(gè)類(lèi)中可以有多個(gè)構(gòu)造方法,多個(gè)構(gòu)造方法是以重載的形式存在的 2、構(gòu)造方法是可以被private修飾的,作用:其他程序無(wú)法創(chuàng)建該類(lèi)的對(duì)象。 * B: 舉例 class Person { private int age; private String name; // 私有無(wú)參數(shù)的構(gòu)造方法,即外界不能通過(guò)new Person();語(yǔ)句創(chuàng)建本類(lèi)對(duì)象 private Person() { } // 多個(gè)構(gòu)造方法是以重載的形式存在 Person(int a) { age = a; } Person(String nm, int a) { name = nm; age = a; } }08構(gòu)造方法和一般方法區(qū)別
* A: 目前為止,學(xué)習(xí)兩種方法,分別為構(gòu)造方法和一般方法,那么他們之間有什么異同呢? 1.格式不同 構(gòu)造方法 : 修飾符 類(lèi)名(參數(shù)類(lèi)型 參數(shù) ...){ 初始化成員變量 } 一般方法: 需要有返回值類(lèi)型 2.作用不同 構(gòu)造方法一般用來(lái)給成員變量初始化; 一般方法根據(jù)需求而定; 3.調(diào)用方式不同 構(gòu)造方法創(chuàng)建對(duì)象時(shí)調(diào)用, 或者this() super() 語(yǔ)句調(diào)用 普通方法需要對(duì)象調(diào)用或者靜態(tài)方法直接調(diào)用靜態(tài)方法. 4.執(zhí)行不同 構(gòu)造方法在對(duì)象創(chuàng)建時(shí)就執(zhí)行了,而且只執(zhí)行一次。 一般方法是在對(duì)象創(chuàng)建后,需要使用時(shí)才被對(duì)象調(diào)用,并可以被多次調(diào)用。09this在構(gòu)造方法之間的調(diào)用
* A: 在之前學(xué)習(xí)方法之間調(diào)用時(shí),可以通過(guò)方法名進(jìn)行調(diào)用。可是針對(duì)構(gòu)造方法,無(wú)法通過(guò)構(gòu)造方法名來(lái)相互調(diào)用。 構(gòu)造方法之間的調(diào)用,可以通過(guò)this關(guān)鍵字來(lái)完成。 構(gòu)造方法調(diào)用格式: this(參數(shù)列表); * B:調(diào)用構(gòu)造方法的案例 class Person { // Person的成員屬性 private int age; private String name; // 無(wú)參數(shù)的構(gòu)造方法 Person() { } // 給姓名初始化的構(gòu)造方法 Person(String nm) { name = nm; } // 給姓名和年齡初始化的構(gòu)造方法 Person(String nm, int a) { // 由于已經(jīng)存在給姓名進(jìn)行初始化的構(gòu)造方法 name = nm;因此只需要調(diào)用即可 // 調(diào)用其他構(gòu)造方法,需要通過(guò)this關(guān)鍵字來(lái)調(diào)用 this(nm); // 給年齡初始化 age = a; } }10this在構(gòu)造方法調(diào)用的內(nèi)存圖
* A: 被加載的代碼 class Person { private int age; private String name; Person() { } Person(String nm) { name = nm; } Person(String nm, int a) { this(nm); age = a; } } class PersonDemo { public static void main(String[] args) { Person p = new Person("張三", 23); } } * B: 構(gòu)造方法調(diào)用的原理圖 * 圖略 1、先執(zhí)行main方法,main方法壓棧,執(zhí)行其中的new Person(“張三”,23); 2、堆內(nèi)存中開(kāi)辟空間,并為其分配內(nèi)存地址0x33,,緊接著成員變量默認(rèn)初始化(name=null age = 0); 3、擁有兩個(gè)參數(shù)的構(gòu)造方法(Person(String nm , int a))壓棧,在這個(gè)構(gòu)造方法中有一個(gè)隱式的this,因?yàn)闃?gòu)造方法是給對(duì)象初始化的,那個(gè)對(duì)象調(diào)用到這個(gè)構(gòu)造方法,this就指向堆中的那個(gè)對(duì)象。 4、由于Person(String nm , int a)構(gòu)造方法中使用了this(nm);構(gòu)造方法Person(String nm)就會(huì)壓棧,并將“張三”傳遞給nm。在Person(String nm , int a)構(gòu)造方法中同樣也有隱式的this,this的值同樣也為0x33,這時(shí)會(huì)執(zhí)行其中name = nm,即把“張三”賦值給成員的name。當(dāng)賦值結(jié)束后Person(String nm , int a)構(gòu)造方法彈棧。 5、程序繼續(xù)執(zhí)行構(gòu)造方法(Person(String nm , int a)中的age = a;這時(shí)會(huì)將23賦值給成員屬性age。賦值結(jié)束構(gòu)造方法(Person(String nm , int a)彈棧。 6、當(dāng)構(gòu)造方法(Person(String nm , int a)彈棧結(jié)束后,Person對(duì)象在內(nèi)存中創(chuàng)建完成,并將0x33賦值給main方法中的p引用變量。 注意: this到底代表什么呢?this代表的是對(duì)象,具體代表哪個(gè)對(duì)象呢?哪個(gè)對(duì)象調(diào)用了this所在的方法,this就代表哪個(gè)對(duì)象。 調(diào)用其他構(gòu)造方法的語(yǔ)句必須定義在構(gòu)造方法的第一行,原因是初始化動(dòng)作要最先執(zhí)行。11this簡(jiǎn)易應(yīng)用
* A: 當(dāng)在方法中出現(xiàn)了局部變量和成員變量同名的時(shí)候,那么在方法中怎么區(qū)別局部變量成員變量呢?可以在成員變量名前面加上this.來(lái)區(qū)別成員變量和局部變量 * B: 舉例1 class Person { private int age; private String name; // 給姓名和年齡初始化的構(gòu)造方法 Person(String name, int age) { // 當(dāng)需要訪(fǎng)問(wèn)成員變量是,只需要在成員變量前面加上this.即可 this.name = name; this.age = age; } public void speak() { System.out.println("name=" + this.name + ",age=" + this.age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person("張三", 23); p.speak(); } } * C: 舉例2 學(xué)習(xí)完了構(gòu)造方法、this的用法之后,現(xiàn)在做個(gè)小小的練習(xí)。 需求:在Person類(lèi)中定義功能,判斷兩個(gè)人是否是同齡人 class Person { private int age; private String name; // 給姓名和年齡初始化的構(gòu)造方法 Person(String name, int age) { // 當(dāng)需要訪(fǎng)問(wèn)成員變量是,只需要在成員變量前面加上this.即可 this.name = name; this.age = age; } public void speak() { System.out.println("name=" + this.name + ",age=" + this.age); } // 判斷是否為同齡人 public boolean equalsAge(Person p) { // 使用當(dāng)前調(diào)用該equalsAge方法對(duì)象的age和傳遞進(jìn)來(lái)p的age進(jìn)行比較 // 由于無(wú)法確定具體是哪一個(gè)對(duì)象調(diào)用equalsAge方法,這里就可以使用this來(lái)代替 /* * if(this.age == p.age) { return true; } return false; */ return this.age = p.age; } }
==============================第三節(jié)課開(kāi)始====================================
12super關(guān)鍵字_1* A: 子父類(lèi)中構(gòu)造方法的調(diào)用 在創(chuàng)建子類(lèi)對(duì)象時(shí),父類(lèi)的構(gòu)造方法會(huì)先執(zhí)行,因?yàn)樽宇?lèi)中所有構(gòu)造方法的第一行有默認(rèn)的隱式super();語(yǔ)句。 * B: 格式: 調(diào)用本類(lèi)中的構(gòu)造方法 this(實(shí)參列表); 調(diào)用父類(lèi)中的空參數(shù)構(gòu)造方法 super(); 調(diào)用父類(lèi)中的有參數(shù)構(gòu)造方法 super(實(shí)參列表);13super關(guān)鍵字_2
* A:子類(lèi)構(gòu)造方法,有一個(gè)默認(rèn)添加的構(gòu)造方法 public class Student extends Person { public Student(){ super(); } } * B :為什么子類(lèi)對(duì)象創(chuàng)建都要訪(fǎng)問(wèn)父類(lèi)中的構(gòu)造方法?因?yàn)樽宇?lèi)繼承了父類(lèi)的內(nèi)容,所以創(chuàng)建對(duì)象時(shí),必須要先看父類(lèi)是如何對(duì)其內(nèi)容進(jìn)行初始化的,看如下程序 public class Test { public static void main(String[] args) { new Zi(); } } class Fu{ int num ; Fu(){ System.out.println("Fu構(gòu)造方法"+num); num = 4; } } class Zi extends Fu{ Zi(){ //super(); 調(diào)用父類(lèi)空參數(shù)構(gòu)造方法 System.out.println("Zi構(gòu)造方法"+num); } } 執(zhí)行結(jié)果:
Fu構(gòu)造方法0
Zi構(gòu)造方法4
通過(guò)結(jié)果發(fā)現(xiàn),子類(lèi)構(gòu)造方法執(zhí)行時(shí)中,調(diào)用了父類(lèi)構(gòu)造方法,這說(shuō)明,子類(lèi)構(gòu)造方法中有一句super()。 那么,子類(lèi)中的構(gòu)造方法為什么會(huì)有一句隱式的super()呢? 原因:子類(lèi)會(huì)繼承父類(lèi)中的內(nèi)容,所以子類(lèi)在初始化時(shí),必須先到父類(lèi)中去執(zhí)行父類(lèi)的初始化動(dòng)作。這樣,才可以使用父類(lèi)中的內(nèi)容。 當(dāng)父類(lèi)中沒(méi)有空參數(shù)構(gòu)造方法時(shí),子類(lèi)的構(gòu)造方法必須有顯示的super語(yǔ)句,指定要訪(fǎng)問(wèn)的父類(lèi)有參數(shù)構(gòu)造方法。14子類(lèi)父類(lèi)的內(nèi)存圖
略: 具體見(jiàn) day12_source/子類(lèi)父類(lèi)的內(nèi)存圖.JPG15super關(guān)鍵字_3
* A: 創(chuàng)建子類(lèi)對(duì)象的時(shí)候會(huì)必須調(diào)用父類(lèi)的構(gòu)造方法。 子類(lèi)默認(rèn)會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造, 但如果父類(lèi)沒(méi)有無(wú)參構(gòu)造,子類(lèi)的構(gòu)造方法繼續(xù)調(diào)用父類(lèi)的無(wú)參構(gòu)造就會(huì)報(bào)錯(cuò)。 因此子類(lèi)構(gòu)造方法的第一行需要調(diào)用父類(lèi)的構(gòu)造方法,既可以調(diào)用父類(lèi)的無(wú)參構(gòu)造,也可以調(diào)用父類(lèi)的有參構(gòu)造,這樣語(yǔ)法上就不會(huì)報(bào)錯(cuò)。16super關(guān)鍵字_4
* A: 構(gòu)造方法第一行,寫(xiě)this()還是super() * this() 是調(diào)用本類(lèi)的構(gòu)造方法,super()是調(diào)用父類(lèi)的構(gòu)造方法, 且兩條語(yǔ)句不能同時(shí)存在 * 保證子類(lèi)的所有構(gòu)造方法調(diào)用到父類(lèi)的構(gòu)造方法即可 * B: 小結(jié): * 無(wú)論如何,子類(lèi)的所有構(gòu)造方法,直接或間接必須調(diào)用到父類(lèi)構(gòu)造方法; * 子類(lèi)的構(gòu)造方法什么都不寫(xiě),默認(rèn)的構(gòu)造方法第一行super()17創(chuàng)建子類(lèi)對(duì)象過(guò)程的細(xì)節(jié)
* A 創(chuàng)建子類(lèi)對(duì)象過(guò)程的細(xì)節(jié) * 如果子類(lèi)的構(gòu)造方法第一行寫(xiě)了this調(diào)用了本類(lèi)其他構(gòu)造方法,那么super調(diào)用父類(lèi)的語(yǔ)句還有嗎? * 這時(shí)是沒(méi)有的,因?yàn)閠his()或者super(),只能定義在構(gòu)造方法的第一行,因?yàn)槌跏蓟瘎?dòng)作要先執(zhí)行。 * 父類(lèi)構(gòu)造方法中是否有隱式的super呢? * 也是有的。記?。褐灰菢?gòu)造方法默認(rèn)第一行都是super(); * 父類(lèi)的父類(lèi)是誰(shuí)呢?super調(diào)用的到底是誰(shuí)的構(gòu)造方法呢? * Java體系在設(shè)計(jì),定義了一個(gè)所有對(duì)象的父類(lèi)Object * 注意: 類(lèi)中的構(gòu)造方法默認(rèn)第一行都有隱式的super()語(yǔ)句,在訪(fǎng)問(wèn)父類(lèi)中的空參數(shù)構(gòu)造方法。所以父類(lèi)的構(gòu)造方法既可以給自己的對(duì)象初始化,也可以給自己的子類(lèi)對(duì)象初始化。 如果默認(rèn)的隱式super()語(yǔ)句在父類(lèi)中沒(méi)有對(duì)應(yīng)的構(gòu)造方法,那么必須在構(gòu)造方法中通過(guò)this或者super的形式明確要調(diào)用的構(gòu)造方法。
==============================第四節(jié)課開(kāi)始====================================
18super的應(yīng)用* A: 練習(xí):描述學(xué)生和工人這兩個(gè)類(lèi),將他們的共性name和age抽取出來(lái)存放在父類(lèi)中,并提供相應(yīng)的get和set方法,同時(shí)需要在創(chuàng)建學(xué)生和工人對(duì)象就必須明確姓名和年齡 * 案例: //定義Person類(lèi),將Student和Worker共性抽取出來(lái) class Person { private String name; private int age; public Person(String name, int age) { // super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Student extends Person { // Student類(lèi)的構(gòu)造方法 Student(String name, int age) { // 使用super關(guān)鍵字調(diào)用父類(lèi)構(gòu)造方法,進(jìn)行相應(yīng)的初始化動(dòng)作 super(name, age); } public void study() {// Studnet中特有的方法 System.out.println(this.getName() + "同學(xué)在學(xué)習(xí)"); } } class Worker extends Person { Worker(String name, int age) { // 使用super關(guān)鍵字調(diào)用父類(lèi)構(gòu)造方法,進(jìn)行相應(yīng)的初始化動(dòng)作 super(name, age); } public void work() {// Worker 中特有的方法 System.out.println(this.getName() + "工人在工作"); } } public class Test { public static void main(String[] args) { Student stu = new Student("小明",23); stu.study(); Worker w = new Worker("小李",45); w.work(); } }19完整員工案例分析
* A: 項(xiàng)目介紹 某IT公司有多名員工,按照員工負(fù)責(zé)的工作不同,進(jìn)行了部門(mén)的劃分(研發(fā)部員工、維護(hù)部員工)。研發(fā)部根據(jù)所需研發(fā)的內(nèi)容不同,又分為JavaEE工程師、Android工程師;維護(hù)部根據(jù)所需維護(hù)的內(nèi)容不同,又分為網(wǎng)絡(luò)維護(hù)工程師、硬件維護(hù)工程師。 公司的每名員工都有他們自己的員工編號(hào)、姓名,并要做它們所負(fù)責(zé)的工作。 工作內(nèi)容 JavaEE工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在研發(fā)淘寶網(wǎng)站 Android工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在研發(fā)淘寶手機(jī)客戶(hù)端軟件 網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在檢查網(wǎng)絡(luò)是否暢通 硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在修復(fù)打印機(jī) 請(qǐng)根據(jù)描述,完成員工體系中所有類(lèi)的定義,并指定類(lèi)之間的繼承關(guān)系。進(jìn)行XX工程師類(lèi)的對(duì)象創(chuàng)建,完成工作方法的調(diào)用。 * B: 案例分析 根據(jù)上述部門(mén)的描述,得出如下的員工體系圖 根據(jù)員工信息的描述,確定每個(gè)員工都有員工編號(hào)、姓名、要進(jìn)行工作。則,把這些共同的屬性與功能抽取到父類(lèi)中(員工類(lèi)),關(guān)于工作的內(nèi)容由具體的工程師來(lái)進(jìn)行指定。 工作內(nèi)容 JavaEE工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在研發(fā)淘寶網(wǎng)站 Android工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在研發(fā)淘寶手機(jī)客戶(hù)端軟件 網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在檢查網(wǎng)絡(luò)是否暢通 硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在修復(fù)打印機(jī) 創(chuàng)建JavaEE工程師對(duì)象,完成工作方法的調(diào)用20案例代碼實(shí)現(xiàn)
* A:定義員工類(lèi)(抽象類(lèi)) public abstract class Employee { private String id;// 員工編號(hào) private String name; // 員工姓名 //空參數(shù)構(gòu)造方法 public Employee() { super(); } //有參數(shù)構(gòu)造方法 public Employee(String id, String name) { super(); this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } //工作方法(抽象方法) public abstract void work(); } * B : 定義研發(fā)部員工類(lèi)Developer 繼承 員工類(lèi)Employee public abstract class Developer extends Employee { //空參數(shù)構(gòu)造方法 public Developer() { super(); } //有參數(shù)構(gòu)造方法 public Developer(String id, String name) { super(id, name); } } * C: 定義維護(hù)部員工類(lèi)Maintainer 繼承 員工類(lèi)Employee public abstract class Maintainer extends Employee { //空參數(shù)構(gòu)造方法 public Maintainer() { super(); } //有參數(shù)構(gòu)造方法 public Maintainer(String id, String name) { super(id, name); } } * D: 定義JavaEE工程師 繼承 研發(fā)部員工類(lèi),重寫(xiě)工作方法 public class JavaEE extends Developer { //空參數(shù)構(gòu)造方法 public JavaEE() { super(); } //有參數(shù)構(gòu)造方法 public JavaEE(String id, String name) { super(id, name); } @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在研發(fā)淘寶網(wǎng)站"); } } * E: 定義Android工程師 繼承 研發(fā)部員工類(lèi),重寫(xiě)工作方法 public class Android extends Developer { //空參數(shù)構(gòu)造方法 public Android() { super(); } //有參數(shù)構(gòu)造方法 public Android(String id, String name) { super(id, name); } @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在研發(fā)淘寶手機(jī)客戶(hù)端軟件"); } } * F: 定義Network網(wǎng)絡(luò)維護(hù)工程師 繼承 維護(hù)部員工類(lèi),重寫(xiě)工作方法 public class Network extends Maintainer { //空參數(shù)構(gòu)造方法 public Network() { super(); } //有參數(shù)構(gòu)造方法 public Network(String id, String name) { super(id, name); } @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在檢查網(wǎng)絡(luò)是否暢通"); } } * G: 定義Hardware硬件維護(hù)工程師 繼承 維護(hù)部員工類(lèi),重寫(xiě)工作方法 public class Hardware extends Maintainer { //空參數(shù)構(gòu)造方法 public Hardware() { super(); } //有參數(shù)構(gòu)造方法 public Hardware(String id, String name) { super(id, name); } @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在修復(fù)打印機(jī)"); } } * H: 在測(cè)試類(lèi)中,創(chuàng)建JavaEE工程師對(duì)象,完成工作方法的調(diào)用 public class Test { public static void main(String[] args) { //創(chuàng)建JavaEE工程師員工對(duì)象,該員工的編號(hào)000015,員工的姓名 小明 JavaEE ee = new JavaEE("000015", "小明"); //調(diào)用該員工的工作方法 ee.work(); } }21總結(jié)
* 把今天的知識(shí)點(diǎn)總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67145.html
摘要:每次調(diào)用構(gòu)造都執(zhí)行,并且在構(gòu)造方法前執(zhí)行靜態(tài)代碼塊在類(lèi)中方法外出現(xiàn),并加上修飾用于給類(lèi)進(jìn)行初始化,隨著類(lèi)加載而加載,一般用來(lái)給類(lèi)進(jìn)行初始化,在加載的時(shí)候就執(zhí)行,并且只執(zhí)行一次。的構(gòu)造方法這是一條隱藏語(yǔ)句,用來(lái)訪(fǎng)問(wèn)父類(lèi)中的空參構(gòu)造。 1.代碼塊的概述和分類(lèi)(了解)(實(shí)際不用) A:代碼塊概述 在Java中,使用{}括起來(lái)的代碼被稱(chēng)為代碼塊。 B:代碼塊分類(lèi) 根據(jù)其位置和聲明的不同...
摘要:使用實(shí)現(xiàn)功能運(yùn)行期注解案例使用簡(jiǎn)單的注解,便可以設(shè)置布局,等效于使用實(shí)現(xiàn)路由綜合型案例比較全面的介紹從零起步,一步一步封裝簡(jiǎn)易的路由開(kāi)源庫(kù)。申明注解用的就是。返回值表示這個(gè)注解里可以存放什么類(lèi)型值。 YCApt關(guān)于apt方案實(shí)踐與總結(jié) 目錄介紹 00.注解系列博客匯總 01.什么是apt 02.annotationProcessor和apt區(qū)別 03.項(xiàng)目目錄結(jié)構(gòu) 04.該案例作用 ...
摘要:繼承的出現(xiàn)讓類(lèi)與類(lèi)之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。繼承的注意事項(xiàng)繼承的注意事項(xiàng)在中,類(lèi)只支持單繼承,不允許多繼承,也就是說(shuō)一個(gè)類(lèi)只能有一個(gè)直接父類(lèi),例如下面這種情況是不合法的。 01繼承的概述 *A:繼承的概念 *a:繼承描述的是事物之間的所屬關(guān)系,通過(guò)繼承可以使多種事物之間形成一種關(guān)系體系 *b:在Java中,類(lèi)的繼承是指在一個(gè)現(xiàn)有類(lèi)的基礎(chǔ)上去構(gòu)建一個(gè)新的類(lèi), ...
摘要:案例演示抽象類(lèi)的成員特點(diǎn)抽象類(lèi)的成員方法特性抽象方法強(qiáng)制要求子類(lèi)做的事情。抽象類(lèi)中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪(fǎng)問(wèn)特點(diǎn)代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫(xiě) 3.要有父類(lèi)引用指向子類(lèi)對(duì)象。 C:多態(tài)中的成員訪(fǎng)問(wèn)特點(diǎn)之 成員變量:編譯和運(yùn)行都看父類(lèi)。 成員方法:編...
摘要:中所有的基礎(chǔ)類(lèi)型類(lèi)等都繼承,默認(rèn)值是,自帶和,而如果是或者的話(huà),那么它只有一個(gè)方法。斷言失敗則程序立刻終止檢查是否為空字符串檢查是否小于等于檢查是否為檢查是否為字符串中,支持類(lèi)型。類(lèi)繼承類(lèi),通過(guò)關(guān)鍵字調(diào)用類(lèi)的構(gòu)造函數(shù)。泛型全面支持泛型。 目錄介紹 01.變量聲明 1.1 var聲明變量 1.2 變量和常量 1.3 dynamic和Object 02.數(shù)據(jù)類(lèi)型 2.1 基本...
閱讀 2920·2023-04-25 20:02
閱讀 1522·2021-11-11 16:55
閱讀 698·2021-09-26 09:46
閱讀 6438·2021-09-22 15:55
閱讀 1887·2021-08-09 13:41
閱讀 1637·2019-08-30 15:52
閱讀 2443·2019-08-30 14:13
閱讀 3481·2019-08-26 13:48