摘要:繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。繼承的注意事項(xiàng)繼承的注意事項(xiàng)在中,類只支持單繼承,不允許多繼承,也就是說(shuō)一個(gè)類只能有一個(gè)直接父類,例如下面這種情況是不合法的。
01繼承的概述
*A:繼承的概念 *a:繼承描述的是事物之間的所屬關(guān)系,通過(guò)繼承可以使多種事物之間形成一種關(guān)系體系 *b:在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個(gè)新的類, 構(gòu)建出來(lái)的新類被稱作子類,現(xiàn)有類被稱作父類 *B:繼承關(guān)系的子類特點(diǎn) *a:子類會(huì)自動(dòng)擁有父類所有非private修飾的屬性和方法02繼承的定義格式和使用
*A:繼承的格式 class 子類 extends 父類 {} *B:雇員(Employee)與研發(fā)部員工(Developer)案例: *cn.itcast.demo01包下: *Employee.java: /* * 定義員工類Employee */ class Employee { String name; // 定義name屬性 public void work() {// 定義員工的工作方法 System.out.println("盡心盡力地工作"); } } *Developer.java: /* * 定義研發(fā)部員工類Developer 繼承 員工類Employee * 繼承了父類中所有非private修飾的成員變量 */ class Developer extends Employee { // 定義一個(gè)打印name的方法 public void printName() { System.out.println("name=" + name); } } *測(cè)試員工類與研發(fā)部員工類: /* * 定義測(cè)試類 */ public class Example01 { public static void main(String[] args) { Developer d = new Developer(); // 創(chuàng)建一個(gè)研發(fā)部員工類對(duì)象 d.name = "小明"; // 為該員工類的name屬性進(jìn)行賦值 d.printName(); // 調(diào)用該員工的printName()方法 d.work(); // 調(diào)用Developer類繼承來(lái)的work()方法 } } *通過(guò)子類對(duì)象既可以調(diào)用自身的非private修飾的成員,也可以調(diào)用父類的非private修飾的成員03繼承的好處
*A:繼承的好處: *1、繼承的出現(xiàn)提高了代碼的復(fù)用性,提高軟件開(kāi)發(fā)效率。 *2、繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。04繼承的注意事項(xiàng)
*A:繼承的注意事項(xiàng) *a:在Java中,類只支持單繼承,不允許多繼承,也就是說(shuō)一個(gè)類只能有一個(gè)直接父類,例如下面這種情況是不合法的。 class A{} class B{} class C extends A,B{} // C類不可以同時(shí)繼承A類和B類 假如支持多繼承例如: class A{ int a=3; public void method(){ } } class B{ int a=5; public void method(){ } } class C extends A,B{ } class Demo{ public static void main(String[] args){ C c=new C(); System.out.println(c.a);//到底是調(diào)用A的還是B的成員變量??無(wú)法確定 c.method();//到底是調(diào)用A的還是B的成員方法??無(wú)法確定 } } ? *b:多個(gè)類可以繼承一個(gè)父類,例如下面這種情況是允許的(就像你爹可以多個(gè)兒子,但是這些兒子都只有一個(gè)爹) class A{} class B extends A{} class C extends A{} // 類B和類C都可以繼承類A ? *c:在Java中,多層繼承是可以的, 即一個(gè)類的父類可以再去繼承另外的父類, 例如C類繼承自B類,而B(niǎo)類又可以去繼承A類,這時(shí),C類也可稱作A類的子類。下面這種情況是允許的。 class A{} class B extends A{} // 類B繼承類A,類B是類A的子類 class C extends B{} // 類C繼承類B,類C是類B的子類,同時(shí)也是類A的子類
?
*d:在Java中,子類和父類是一種相對(duì)概念, 也就是說(shuō)一個(gè)類是某個(gè)類父類的同時(shí),也可以是另一個(gè)類的子類。 例如上面的這種情況中,B類是A類的子類,同時(shí)又是C類的父類。05繼承的體系.avi 11:00
*A:繼承的體系:
動(dòng)物(吃) | ------------------------- | | 貓科動(dòng)物(吃,胎生) 爬行動(dòng)物(吃,卵生) | | ------------------------------- ----------------- | | | | 貓(吃,抓老鼠,胎生) 虎(吃,領(lǐng)地,胎生) 蛇(吃,冬眠,卵生) 鱷魚(yú)(吃,潛水,卵生) *a:動(dòng)物體系是對(duì)每個(gè)具體事物共性的抽取,子類的共性抽取形成父類 *b:父類:具有所有子類的共性內(nèi)容 子類:不但有共性還有自身特有的內(nèi)容 *c:整個(gè)繼承體系,越向上越抽象,越向下越具體06繼承后子類父類成員變量的特點(diǎn)
A:繼承后子類父類成員變量的特點(diǎn) a:子類的對(duì)象調(diào)用成員變量的時(shí)候,子類自己有,使用子類,子類自己沒(méi)有調(diào)用的父類 class Fu{ //Fu中的成員變量。 int num = 5; } class Zi extends Fu{ //Zi中的成員變量 int num2 = 6; //Zi中的成員方法 public void show() { //訪問(wèn)父類中的num System.out.println("Fu num="+num); //訪問(wèn)子類中的num2 System.out.println("Zi num2="+num2); } } class Demo{ public static void main(String[] args) { Zi z = new Zi(); //創(chuàng)建子類對(duì)象 z.show(); //調(diào)用子類中的show方法 } } b:當(dāng)子父類中出現(xiàn)了同名成員變量 class Fu{ //Fu中的成員變量。 int num = 5; } class Zi extends Fu{ //Zi中的成員變量 int num = 6; void show(){ //子類的局部變量 int num=7 //直接訪問(wèn),遵循就近查找原則 System.out.println(num);//7 //子父類中出現(xiàn)了同名的成員變量時(shí) //在子類中需要訪問(wèn)父類中非私有成員變量時(shí),需要使用super關(guān)鍵字 //訪問(wèn)父類中的num System.out.println("Fu num="+super.num);//5 //訪問(wèn)子類中的num2 System.out.println("Zi num2="+this.num);//6 } } class Demo5 { public static void main(String[] args) { Zi z = new Zi(); //創(chuàng)建子類對(duì)象 z.show(); //調(diào)用子類中的show方法 } }07繼承后子類父類成員方法的特性_子類重寫父類方法
A:繼承后子類父類成員方法的特性 a:子類的對(duì)象調(diào)用方法的時(shí)候,子類自己有,使用子類,子類自己沒(méi)有調(diào)用的父類 class Fu{ public void show(){ System.out.println("Fu類中的show方法執(zhí)行"); } } class Zi extends Fu{ public void show2(){ System.out.println("Zi類中的show2方法執(zhí)行"); } } public class Test{ public static void main(String[] args) { Zi z = new Zi(); z.show(); //子類中沒(méi)有show方法,但是可以找到父類方法去執(zhí)行 z.show2(); } } b:為什么要有重寫? class Fu{ public void method(){ //上千行代碼 //Fu類中的方法最先存在,那么如果項(xiàng)目需求變了,該方法 //功能不能夠滿足我們的需求,此時(shí)我們也不會(huì)去改這個(gè)方法 //因?yàn)轫?xiàng)目中可能有大量的功能已經(jīng)使用到該方法,如果隨意修改可能使調(diào)用該方法的功能出現(xiàn)問(wèn)題 //所以使用重寫方式基于原有功能提供更強(qiáng)的功能 } } class Zi extends Fu{ } c:子類中出現(xiàn)與父類一模一樣的方法時(shí),會(huì)出現(xiàn)覆蓋操作,也稱為override重寫、復(fù)寫或者覆蓋 class Fu{ public void show(){ System.out.println("Fu show"); } } class Zi extends Fu{ //子類復(fù)寫了父類的show方法 public void show(){ System.out.println("Zi show"); } } public class Test{ public static void main(String[] args) { Zi z = new Zi(); z.show(); //Zi show 子類有直接使用子類 } }08方法覆蓋的需求
A:方法覆蓋的需求 a:案例:比如手機(jī),當(dāng)描述一個(gè)手機(jī)時(shí),它具有發(fā)短信,打電話,顯示來(lái)電號(hào)碼功能, 后期由于手機(jī)需要在來(lái)電顯示功能中增加顯示姓名和頭像, 這時(shí)可以重新定義一個(gè)類描述智能手機(jī),并繼承原有描述手機(jī)的類。 并在新定義的類中覆蓋來(lái)電顯示功能,在其中增加顯示姓名和頭像功能 b:分析:我們不改裝(破壞)原來(lái)的手機(jī),而是再買一個(gè)新的智能手機(jī),不但有原有的功能,而且還有特有功能 例:廠商發(fā)布新手機(jī)都是基于原有手機(jī)的升級(jí),不會(huì)拿著原有的手機(jī)在賣,新產(chǎn)一款 1:分析類的構(gòu)建: 手機(jī)類 屬性(成員變量):無(wú) 行為(成員方法): 發(fā)短信 打電話 來(lái)電顯示:顯示來(lái)電號(hào)碼 智能手機(jī)類: 屬性(成員變量):無(wú) 行為(成員方法): 發(fā)短信 打電話 來(lái)電顯示:顯示來(lái)電號(hào)碼,顯示姓名和頭像 手機(jī)類和智能手機(jī)類有共性內(nèi)容: 發(fā)短信 打電話 顯示來(lái)電號(hào)碼 2:繼承關(guān)系分析: 對(duì)于發(fā)短信和打電話功能,讓智能手機(jī)直接沿用(繼承)手機(jī)的就可以 但是在智能手機(jī)中的來(lái)電顯示不但實(shí)現(xiàn)號(hào)碼,還顯示姓名和頭像,同樣的都是來(lái)電顯示功能,智能手機(jī)的來(lái)電顯示比手機(jī)的功能更加強(qiáng)大,我們考慮使用重寫09方法覆蓋的手機(jī)案例實(shí)現(xiàn)
//手機(jī)類 class Phone{ public void sendMessage(){ System.out.println("發(fā)短信"); } public void call(){ System.out.println("打電話"); } public void showNum(){ System.out.println("來(lái)電顯示號(hào)碼"); } } //智能手機(jī)類 class NewPhone extends Phone{ //覆蓋父類的來(lái)電顯示號(hào)碼功能,并增加自己的顯示姓名和圖片功能 //從現(xiàn)實(shí)生活角度考慮沿用原有的showNum方法名便于用戶更快熟悉和接受,而不是再起個(gè)新的名字 //用戶還需要花費(fèi)大量時(shí)間慢慢接受 public void showNum(){ //調(diào)用父類已經(jīng)存在的功能使用super //如果不加super這是調(diào)用子類自身的showNum(),自己調(diào)用自己,遞歸 //方法不斷入棧導(dǎo)致內(nèi)存溢出 super.showNum(); //增加自己特有顯示姓名和圖片功能 System.out.println("顯示來(lái)電姓名"); System.out.println("顯示頭像"); } } public class Test { public static void main(String[] args) { new NewPhone().showNum();//來(lái)電顯示 顯示來(lái)電姓名 顯示頭像 } }10方法覆蓋的注意事項(xiàng)
A:方法覆蓋的注意事項(xiàng)
a:權(quán)限:子類方法覆蓋父類方法,必須要保證權(quán)限大于等于父類權(quán)限。 四大權(quán)限:public>默認(rèn)=protected>private class Fu{ void show(){ } public void method(){ } } class Zi() extends Fu{ public void show(){//編譯運(yùn)行沒(méi)問(wèn)題 } void method(){//編譯錯(cuò)誤 } } b:方法定義:子類方法和要重寫的父類的方法:方法的方法名和參數(shù)列表都要一樣。 關(guān)于方法的返回值: 如果是基本數(shù)據(jù)類型,子類的方法和重寫的父類的方法返回值類型必須相同 如果是引用數(shù)據(jù)類型,子類的方法和重寫的父類的方法返回值類型可以相同或者子類方法的返回值類型是父類方法返回值類型的子類 class Fu{ int show(){ } public Fu method(){ } public Fu method2(){ } } class Zi() extends Fu{ public int show(){//返回值為基本類型的重寫 } public Fu method(){//子類的方法和重寫的父類的方法返回值類型可以相同 } public Zi method2(){//子類方法的返回值類型是父類方法返回值類型的子類 } } c:重載與重寫對(duì)比: 重載: 權(quán)限修飾符(public private 默認(rèn)):無(wú)關(guān) 方法名:重載的兩個(gè)方法的方法名必須相同 形參列表: 形參類型的順序不同 形參的個(gè)數(shù)不同 形參的類型不同 三者至少滿足一個(gè) 返回值類型: 重載與返回值類型無(wú)關(guān) 重寫: 權(quán)限修飾符(public private 默認(rèn)): 子類方法的權(quán)限>=父類的方法的權(quán)限 方法名: 子類方法和父類方法必須相同 形參列表: 子類方法和父類方法的形參列表必須相同 返回值類型: 基本類數(shù)據(jù)類型: 必須相同 引用數(shù)據(jù)類型: 子類方法的返回值類型和父類方法的返回值類型相同 或者 子類方法的返回值類型是父類方法的返回值類型的 子類11抽象類的產(chǎn)生
A:抽象類的產(chǎn)生 a:分析事物時(shí),發(fā)現(xiàn)了共性內(nèi)容,就出現(xiàn)向上抽取。會(huì)有這樣一種特殊情況,就是方法功能聲明相同,但方法功能主體不同。那么這時(shí)也可以抽取,但只抽取方法聲明,不抽取方法主體。那么此方法就是一個(gè)抽象方法。12抽象類的定義格式
A:抽象方法定義的格式: a:public abstract 返回值類型 方法名(參數(shù)); 抽象類定義的格式: abstract class 類名 { } b:抽象類示例代碼: /* * 定義類開(kāi)發(fā)工程師類 * EE開(kāi)發(fā)工程師 : 工作 * Android開(kāi)發(fā)工程師 : 工作 * * 根據(jù)共性進(jìn)行抽取,然后形成一個(gè)父類Develop * 定義方法,工作: 怎么工作,具體干什么呀 * * 抽象類,不能實(shí)例化對(duì)象, 不能new的 * 不能創(chuàng)建對(duì)象的原因: 如果真的讓你new了, 對(duì)象.調(diào)用抽象方法,抽象方法沒(méi)有主體,根本就不能運(yùn)行 * 抽象類使用: 定義類繼承抽象類,將抽象方法進(jìn)行重寫,創(chuàng)建子類的對(duì)象 */ public abstract class Develop { //定義方法工作方法,但是怎么工作,說(shuō)不清楚了,講不明白 //就不說(shuō), 方法沒(méi)有主體的方法,必須使用關(guān)鍵字abstract修飾 //抽象的方法,必須存在于抽象的類中,類也必須用abstract修飾 public abstract void work(); }13抽象類的使用方式
A:抽象類的使用方式 /* * 定義類,JavaEE的開(kāi)發(fā)人員 * 繼承抽象類Develop,重寫抽象的方法 */ public class JavaEE extends Develop{ //重寫父類的抽象方法 //去掉abstract修飾符,加上方法主體 public void work(){ System.out.println("JavaEE工程師在開(kāi)發(fā)B/S 軟件"); } } /* * 定義Android類,繼承開(kāi)發(fā)人員類 * 重寫抽象方法 */ public class Android extends Develop{ public void work(){ System.out.println("Android工程師開(kāi)發(fā)手機(jī)軟件"); } } /* * 測(cè)試抽象類 * 創(chuàng)建他的子類的對(duì)象,使用子類的對(duì)象調(diào)用方法 */ public class Test { public static void main(String[] args) { JavaEE ee = new JavaEE(); ee.work();//"JavaEE工程師在開(kāi)發(fā)B/S 軟件" Android and = new Android(); and.work();//"Android工程師開(kāi)發(fā)手機(jī)軟件" } }14抽象類特點(diǎn)
A:抽象類的特點(diǎn)
a:抽象類和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類中。 b:抽象類不可以直接創(chuàng)建對(duì)象,原因:調(diào)用抽象方法沒(méi)有意義。 c:只有覆蓋了抽象類中所有的抽象方法后,其子類才可以創(chuàng)建對(duì)象。否則該子類還是一個(gè)抽象類。 之所以繼承抽象類,更多的是在思想,是面對(duì)共性類型操作會(huì)更簡(jiǎn)單。 abstract class A{ public abstract void func(); public abstract void func2(); } class A2 extends A{//A2把A中的兩個(gè)抽象方法都重寫掉了 //A2類不再是抽象類 public void func(){} public void func2(){} } abstract class A3 extends A{//含有抽象方法的類一定是抽象類 public void func(){ } //public abstract void func2();//func2相當(dāng)于被繼承下來(lái) }15抽象類的設(shè)計(jì)思想 4:40
A:抽象類的設(shè)計(jì)思想 a:抽象類的作用:繼承的體系抽象類,強(qiáng)制子類重寫抽象的方法 抽象員工: 規(guī)定一個(gè)方法,work工作 EE員工,Android員工 Develop類 抽象類 abstract work(); | ------------- | | EE Android //是我開(kāi)發(fā)的一員必須工作 work(){} work(){}16抽象類的細(xì)節(jié)
A:抽象類的細(xì)節(jié)
a:抽象類一定是個(gè)父類? 是的,因?yàn)椴粩喑槿《鴣?lái)的。 b:抽象類中是否可以不定義抽象方法? 是可以的,那這個(gè)抽象類的存在到底有什么意義呢?不讓該類創(chuàng)建對(duì)象,方法可以直接讓子類去使用 (適配器設(shè)計(jì)模式) /* * 抽象類,可以沒(méi)有抽象方法,可以定義帶有方法體的方法 * 讓子類繼承后,可以直接使用 */ public abstract class Animal { public void sleep(){ System.out.println("動(dòng)物睡覺(jué)"); } } public class Cat extends Animal{ } public class Test { public static void main(String[] args) { //Cat c = new Cat(); new Cat().sleep();//不讓該類創(chuàng)建對(duì)象,方法可以直接讓子類去使用 } } c:抽象關(guān)鍵字abstract不可以和哪些關(guān)鍵字共存?
? 1:private:私有的方法子類是無(wú)法繼承到的,也不存在覆蓋,
而abstract和private一起使用修飾方法,abstract既要子類去實(shí)現(xiàn)這個(gè)方法, 而private修飾子類根本無(wú)法得到父類這個(gè)方法?;ハ嗝堋? /* * 抽象類,可以沒(méi)有抽象方法,可以定義帶有方法體的方法 * 讓子類繼承后,可以直接使用 */ public abstract class Animal { // private abstract void show(); //抽象方法,需要子類重寫, 如果父類方法是私有的,子類繼承不了,也就沒(méi)有了重寫 }
?
2:final,暫時(shí)不關(guān)注,后面學(xué)
? 3:static,暫時(shí)不關(guān)注,后面學(xué)
17員工案例分析A:員工案例分析:
a:需求描述:
某IT公司有多名員工,按照員工負(fù)責(zé)的工作不同,進(jì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ī)客戶端軟件 ? 網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在檢查網(wǎng)絡(luò)是否暢通 ? 硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在修復(fù)打印機(jī)
b:繼承體系:
員工 | -------------------------------------------- | | 研發(fā)部員工 維護(hù)部員工 | |
------------- -----------
| | | |
JavaEE工程師 Android工程師 網(wǎng)絡(luò)維護(hù)工程師 硬件維護(hù)工程師
c:詳細(xì)描述:
? 根據(jù)員工信息的描述,確定每個(gè)員工都有員工編號(hào)、姓名、要進(jìn)行工作。
則,把這些共同的屬性與功能抽取到父類中(員工類), 關(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ī)客戶端軟件 ? 網(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)用
18員工案例Employee類的編寫A:員工案例Employee類的編寫:按照分析的繼承體系來(lái)逐個(gè)實(shí)現(xiàn)
/* * 定義員工類 * 內(nèi)容,都是所有子類的共性抽取 * 屬性: 姓名,工號(hào) * 方法: 工作 */ public abstract class Employee { private String id;// 員工編號(hào) private String 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(); }19員工案例的子類的編寫
B:員工案例的子類的編寫:
/* * 定義研發(fā)員工類 * 屬于員工中的一種, 繼承員工類 * 抽象類Develop 給自己的員工定義自己有的屬性 */ public abstract class Develop extends Employee{ } /* * 描述JavaEE開(kāi)發(fā)工程師類 * 工號(hào),姓名 工作方法 * 其他的員工,也具備這些共性,抽取到父類中,自己就不需要定義了 * 是研發(fā)部員工的一種,繼承研發(fā)部類 */ public class JavaEE extends Develop{ //重寫他父類的父類的抽象方法 public void work(){ //調(diào)用父類的get方法,獲取name,id值 System.out.println("JavaEE的工程師開(kāi)發(fā)淘寶"+ super.getName()+".."+super.getId()); } } /* *定義Android工程師 繼承 研發(fā)部員工類,重寫工作方法 */ public class Android extends Developer { @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在研發(fā)淘寶手機(jī)客戶端軟件"); } }
/* * 定義維護(hù)員工類,屬于員工中的一種 * 繼承員工類 * 抽象類Maintainer 給自己的員工定義自己有的屬性 */ public abstract class Maintainer extends Employee{ } /* * 描述的是網(wǎng)絡(luò)維護(hù)工程師 * 屬于維護(hù)部的員工,繼承維護(hù)部類 */ public class Network extends Maintainer{ public void work(){ System.out.println("網(wǎng)絡(luò)工程師在檢查網(wǎng)絡(luò)是否暢通"+super.getName()+"..."+super.getId()); } }
?
/* *定義Hardware硬件維護(hù)工程師 繼承 維護(hù)部員工類,重寫工作方法 */ public class Hardware extends Maintainer { @Override public void work() { System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在修復(fù)打印機(jī)"); } }20總結(jié)
把今天的知識(shí)點(diǎn)總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/67148.html
摘要:構(gòu)造方法名稱必須和類型保持一致。構(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ì)象的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性信息。 ...
摘要:當(dāng)遇到方法參數(shù)為抽象類類型時(shí),要傳入一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對(duì)象。根據(jù)向酒店中,增加多名員工其中包含名經(jīng)理,名廚師名服務(wù)員。 01eclipse快捷鍵 * A: ? Ctrl+T:查看所選中類的繼承樹(shù) 例如,在下面代碼中,選中Teacher類名,然后按Ctrl+T,就會(huì)顯示出Teacher類的繼承關(guān)系 * B:? 查看所選中方法的源代碼 Ctrl+...
摘要:多態(tài)的前提是必須有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系,否則無(wú)法完成多態(tài)。具體格式如下父類引用指向子類對(duì)象就是多態(tài)的定義格式。多態(tài)的轉(zhuǎn)型分為向上轉(zhuǎn)型與向下轉(zhuǎn)型兩種向上轉(zhuǎn)型當(dāng)有子類對(duì)象賦值給一個(gè)父類引用時(shí),便是向上轉(zhuǎn)型,多態(tài)本身就是向上轉(zhuǎn)型的過(guò)程。 第3天 面向?qū)ο?今日內(nèi)容介紹? 接口? 多態(tài)? 筆記本案例今日學(xué)習(xí)目標(biāo)? 寫出定義接口的格式? 寫出實(shí)現(xiàn)接口的格式?...
摘要:案例演示抽象類的成員特點(diǎn)抽象類的成員方法特性抽象方法強(qiáng)制要求子類做的事情。抽象類中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪問(wèn)特點(diǎn)代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫 3.要有父類引用指向子類對(duì)象。 C:多態(tài)中的成員訪問(wèn)特點(diǎn)之 成員變量:編譯和運(yùn)行都看父類。 成員方法:編...
簡(jiǎn)介 1.學(xué)習(xí)本篇博文,我們知道在什么場(chǎng)景下使用策略模式。2.策略模式的優(yōu)缺點(diǎn)。3.策略模式的思想。 場(chǎng)景 某公司需要每個(gè)周五每名員工都要提交周報(bào),在該公司可以提交周報(bào)的行為或者算法有:郵箱提交、SVN、Git后兩種一般是開(kāi)發(fā)部門使用的(剛開(kāi)始還沒(méi)有Git提交方式)。 那么在該場(chǎng)景中我們是如何設(shè)計(jì)業(yè)務(wù)邏輯呢? 你可能這么想,我用繼承的方式多好,在一個(gè)超類中都定義有郵箱提交,SVN提交,然后具體角色...
閱讀 2511·2021-11-15 11:36
閱讀 1256·2019-08-30 15:56
閱讀 2310·2019-08-30 15:53
閱讀 1100·2019-08-30 15:44
閱讀 711·2019-08-30 14:13
閱讀 1050·2019-08-30 10:58
閱讀 539·2019-08-29 15:35
閱讀 1362·2019-08-29 13:58