面向?qū)ο蠖鄳B(tài)

多態(tài)

多態(tài)的概念

一種事物的多種形態(tài)

父類變量接收子類對象

父類可以兼容子類類型。Animal aml = new Person();編譯時(shí)運(yùn)行時(shí)屏蔽子類實(shí)現(xiàn)差異

多態(tài)運(yùn)行時(shí)和編譯時(shí)過程


1.編譯時(shí),看的是父類類型,會(huì)現(xiàn)在父類中,看有不有對應(yīng)的方法,如果沒有繼續(xù)向上找{更高父類}

如果找到了,編譯通過,如果找不到,編譯失敗報(bào)錯(cuò)

2.運(yùn)行時(shí):看真實(shí)類型,如果在真實(shí)類型中找到了,就運(yùn)行真實(shí)類型中的函數(shù),如果沒有找到,向上找


問題:編譯通過了,但是運(yùn)行可不可能找不到?不可能的,因?yàn)榫幾g都已經(jīng)說明了,上面一定有

多態(tài)的應(yīng)用實(shí)例:發(fā)現(xiàn)多態(tài)的好處,多態(tài)屏蔽了不同子類的實(shí)現(xiàn)差異

子類的實(shí)現(xiàn)?子類可以覆寫父類的方法的


體現(xiàn)java代碼多態(tài)的幾種情況分析

多態(tài)的應(yīng)用實(shí)例:發(fā)現(xiàn)多態(tài)的好處,多態(tài)屏蔽了不同子類的實(shí)現(xiàn)差異

子類的實(shí)現(xiàn)?子類可以覆寫父類的方法的



數(shù)據(jù)類型轉(zhuǎn)換

為什么需要引用類型數(shù)據(jù)轉(zhuǎn)換

為什么需要數(shù)據(jù)類型轉(zhuǎn)換呢?

1.繼承關(guān)系:父類提取的是共性:明白,子類是有自己特性的

2.開發(fā)中,我們采用了多態(tài)的寫法,出現(xiàn)問題:編譯只看類型


3.怎么解決呢?

例:還原真實(shí)類型【Animal類型變成CoffeCat】數(shù)據(jù)類型的轉(zhuǎn)換


引用類型數(shù)據(jù)轉(zhuǎn)換的兩種情況

引用【數(shù)據(jù)類型】轉(zhuǎn)換的幾種情況

1.小轉(zhuǎn)大【自動(dòng)類型轉(zhuǎn)換】:子類類型轉(zhuǎn)換成父類類型

??Animal aml = new CoffeCat();

2.大轉(zhuǎn)小【強(qiáng)制類型轉(zhuǎn)換】:父類類型轉(zhuǎn)換成子類類型

數(shù)據(jù)類型變量名= (數(shù)據(jù)類型)值;



引用類型的數(shù)據(jù)轉(zhuǎn)換的注意事項(xiàng)


引用數(shù)據(jù)類型轉(zhuǎn)換的注意事項(xiàng):

在類型轉(zhuǎn)換之前應(yīng)該要[先判斷類型],確保類型正確,再做轉(zhuǎn)換


分析

1.編譯:只看類型不看值

Animal aml = new CoffeCat();

Tomcat tc = (Tomcat)aml;

2.編譯:運(yùn)行

編譯:只看類型不看值,我們第二行代碼,大轉(zhuǎn)小,沒問題

運(yùn)行:看真實(shí)類型:把一個(gè)CoffeCat變成一個(gè)Tomcat ?:不行

Exception in thread "main" java.lang.ClassCastException: CoffeCat cannot be cast to Tomcat

final


final修飾符及可修飾內(nèi)容測試

1.final可修飾的內(nèi)容的測試

class Student{

String name;

void eat(){

int i = 10;

}

Student(){

}

class A{}

}

1.可以修飾類

2.可以修飾變量

3.可以修飾普通方法

不能修飾構(gòu)造方法


修飾類的效果

最終類:沒有子類

修飾普通方法的效果

final修飾的方法不能覆寫


static修飾的方法不能覆寫

private修飾的方法不能覆寫

修飾變量的效果

.可以修飾變量:不可變的:

變量這個(gè)容器:如果裝了值,用final修飾了,不能改變值

單例模式

單例模式

概念:

設(shè)計(jì)類:只產(chǎn)生一個(gè)受保護(hù)的對象

餓漢模式及特點(diǎn):



class A{

private A(){//創(chuàng)建一個(gè)私有的無參構(gòu)造(防止外部創(chuàng)建對象)

}

private static A instance=new A();//因?yàn)橐陟o態(tài)上下文中調(diào)用所以用static修飾

public static A getInstance(){//類名.方法名調(diào)用方法得到對象

return instance;

}

}

為什么要叫做惡漢:不管你用還是不用A對象,都先給你創(chuàng)建一個(gè)出來

1.計(jì)算機(jī)啟動(dòng):有些軟件不用,開機(jī)就啟動(dòng),系統(tǒng)的效率

2.啟動(dòng)軟件的時(shí)候:惡漢模式有些對象都不用,都直接啟動(dòng)創(chuàng)建,軟件啟動(dòng)的效率會(huì)降低


懶漢模式及特點(diǎn)

class A{

private A(){//創(chuàng)建私有化的構(gòu)造方法防止外部創(chuàng)建對象

}

private static A instance;//聲明一個(gè)A的對象null

public static A getInstance(){

if(instance==null){//需要時(shí)創(chuàng)建對象

return new A();

}

return instance;//返回對象

}

}

單例模式之懶漢模式:需要的時(shí)候才創(chuàng)建

之所以叫懶漢:因?yàn)橹灰悴挥?,我就不?chuàng)建,只有需要的時(shí)候才創(chuàng)建


1.好處:效率高

2.壞處:線程不安全:導(dǎo)致我們拿到的對象不是一個(gè)對象,新的對象出現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 多態(tài):一個(gè)對象具備多種形態(tài)。(父類的引用類型變量指向了子類的對象)或者是接口 的引用類型變量指向了接口實(shí)現(xiàn)類的對象...
    字節(jié)碼閱讀 384評論 0 1
  • 多態(tài) 多態(tài)是面向?qū)ο缶幊讨凶詈笠粋€(gè)(封裝、繼承、多態(tài))也是最重要的特征。 程序設(shè)計(jì)當(dāng)中,多態(tài)意味著,允許不同類的對...
    kakarotto閱讀 455評論 0 3
  • 一、多態(tài)的概念 多態(tài)是繼封裝,繼承之后,面向?qū)ο蟮娜筇匦浴?現(xiàn)實(shí)事物經(jīng)常會(huì)體現(xiàn)出多種形態(tài),如學(xué)生,學(xué)生是人的一種...
    墨雨軒夏閱讀 558評論 0 7
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,658評論 1 32
  • 人的精力有限 把一件事情,細(xì)分成單獨(dú)的幾件小的事情 然后一個(gè)一個(gè)攻破 再總結(jié)聯(lián)系起來 --------------...
    拼命掙錢的三十六畫生閱讀 224評論 0 0

友情鏈接更多精彩內(nèi)容