摘要:多態(tài)訪問成員變量的兩種方式直接通過對(duì)象名稱訪問成員變量看等號(hào)左邊是誰,優(yōu)先用誰,沒有則向上找。只用于成員方法,不適用于成員變量。
多態(tài)性:
是對(duì)對(duì)象來說的。extends或implements是多態(tài)性的前提。
經(jīng)理類繼承雇員類。小明是一個(gè)經(jīng)理對(duì)象,這個(gè)對(duì)象既有經(jīng)理形態(tài),也有雇員形態(tài)。一個(gè)對(duì)象有多種形態(tài),這就是對(duì)象的多態(tài)性。
多態(tài)性格式:父類引用指向子類對(duì)象
格式:父類名稱 對(duì)象名 = new 子類名稱();
或:接口名稱 對(duì)象名 = new 實(shí)現(xiàn)類名稱();
可以這樣理解:子類被當(dāng)做父類來看待(一個(gè)經(jīng)理被當(dāng)做雇員來看待,一直貓被當(dāng)做動(dòng)物來看待)。而對(duì)象只能引用父類特有的方法。
多態(tài)訪問成員變量的兩種方式:
直接通過對(duì)象名稱訪問成員變量:看等號(hào)左邊是誰,優(yōu)先用誰,沒有則向上找。(編譯看左邊,運(yùn)行還看左邊)
Fu obj = new Zi(); System.out.println(obj.num);
間接通過成員方法訪問成員變量:看該方法屬于誰優(yōu)先用誰,沒有則向上找。(先看右邊子類中有沒有該方法,沒有則向上找)
多態(tài)訪問成員方法:訪問成員方法的規(guī)則:看new的是誰,則優(yōu)先用誰,沒有則向上找(編譯看左邊,運(yùn)行看右邊)。
先看左邊父類中有沒有該方法,沒有則編譯不通過報(bào)錯(cuò),但運(yùn)行時(shí)是看右邊子類方法,沒有則向上找。只用于成員方法,不適用于成員變量。
向上轉(zhuǎn)型和向下轉(zhuǎn)型在Java中,對(duì)象變量是多態(tài)的。
Employee e; e = new Employee(...); e = new Manager(...);//Manager繼承Employee
這里的Employee類變量可以引用Employee類對(duì)象和任何一個(gè)Employee類的子類。
在《JAVA核心技術(shù)卷一》P152的代碼中
Manager boss = new Manager(...); Employee[] staff = new Employee[3]; staff[0] = boss; Employee boss = new Employee(...); Manager[] staff = new Manager[3]; staff[0] = boss;//錯(cuò)誤!
boss是Manager類對(duì)象,staff數(shù)組是Employee類對(duì)象,所以staff可以和boss指向同一對(duì)象,且編譯器將staff[0]看成Employee對(duì)象。如果是下面這段代碼會(huì)報(bào)錯(cuò),因?yàn)椴皇撬械墓蛦T都是經(jīng)理(類比double轉(zhuǎn)換int可能會(huì)損失精度)。
向上轉(zhuǎn)型一定是安全的,從小范圍轉(zhuǎn)向了大范圍(從小范圍的經(jīng)理轉(zhuǎn)向大范圍的雇員,從小范圍的貓轉(zhuǎn)向大范圍的動(dòng)物,類似于從小范圍的int轉(zhuǎn)向大范圍的double不會(huì)損失精度)。
對(duì)象的向上轉(zhuǎn)型其實(shí)就是多態(tài)寫法:
//格式:父類名稱 對(duì)象名 = new 子類名稱(); //右邊創(chuàng)建了一個(gè)子類對(duì)象,把它當(dāng)做父類看待使用 Employee Manager = new Manager() //創(chuàng)建了一個(gè)經(jīng)理對(duì)象,把它當(dāng)做雇員來看待
向下轉(zhuǎn)型是一個(gè)【還原】的動(dòng)作,但要保證對(duì)象一開始創(chuàng)建的時(shí)候 ,就是經(jīng)理,才能由雇員向下轉(zhuǎn)型為經(jīng)理。(用instanceof關(guān)鍵字判斷前面的對(duì)象是不是后面的類型)
String c = (String)staff[1]; //會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)镾tring不是Employee的子類
只能在繼承層次內(nèi)進(jìn)行類型轉(zhuǎn)換
將超類轉(zhuǎn)換成子類(向下轉(zhuǎn)型)之前,應(yīng)該使用instanceof進(jìn)行檢查
類型轉(zhuǎn)換不是一種好的做法,多態(tài)的對(duì)象向下轉(zhuǎn)型是為了使用子類特有的方法,這種情況下應(yīng)該檢查超類的設(shè)計(jì)是否合理,也許重新設(shè)計(jì)超類并添加相應(yīng)方法才是正確做法。盡量少用類型轉(zhuǎn)換和instanceof
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75233.html
摘要:接口的概念接口的概念接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。多態(tài)的前提是必須有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系,否則無法完成多態(tài)。 01接口的概念 * A:接口的概念 接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。 接口只描述所應(yīng)該具備的方法,并沒有具體實(shí)現(xiàn),具體的實(shí)現(xiàn)由接口的實(shí)現(xiàn)類(相當(dāng)于接口的子類)來完成。這樣將功能的定...
摘要:多態(tài)的前提是必須有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系,否則無法完成多態(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)型的過程。 第3天 面向?qū)ο?今日內(nèi)容介紹? 接口? 多態(tài)? 筆記本案例今日學(xué)習(xí)目標(biāo)? 寫出定義接口的格式? 寫出實(shí)現(xiàn)接口的格式?...
摘要:概念所謂多態(tài),就是指一個(gè)引用變量類型在不同的情況下的多種狀態(tài)。需進(jìn)行強(qiáng)制轉(zhuǎn)換有風(fēng)險(xiǎn),最好使用進(jìn)行判斷。繼承在多態(tài)中必須存在有繼承關(guān)系的子類和父類。在中有兩種形式可以實(shí)現(xiàn)多態(tài)繼承和接口。 概念 所謂多態(tài),就是指一個(gè)引用變量(類型)在不同的情況下的多種狀態(tài)。也可以理解為,多態(tài)是指通過指向父類的指針,來調(diào)用在不同子類中實(shí)現(xiàn)的方法。多態(tài)性是對(duì)象多種表現(xiàn)形式的體現(xiàn) 多態(tài)性嚴(yán)格來說有兩種描述形式:...
摘要:面向?qū)ο缶幊趟枷朊嫦驅(qū)ο?,?jiǎn)單來說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。面向?qū)ο笫窍鄬?duì)于面向過程的。面向?qū)ο笕筇卣髅嫦驅(qū)ο笥腥筇卣?,即封裝繼承和多態(tài)。接口和抽象類接口接口名方法方法,默認(rèn)修飾符為,不能用其他修飾符修飾接口。 面向?qū)ο缶幊趟枷?面向?qū)ο?,?jiǎn)單來說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。結(jié)合具體例子來說就是使用某個(gè)人或者工具所具有的功能而不用去管功能的具體實(shí)現(xiàn)方式。例如現(xiàn)實(shí)中...
閱讀 3674·2023-04-26 01:43
閱讀 3046·2021-10-14 09:42
閱讀 5731·2021-09-30 09:59
閱讀 2231·2021-09-04 16:40
閱讀 1276·2019-08-30 15:52
閱讀 898·2019-08-29 17:09
閱讀 2105·2019-08-26 13:37
閱讀 3592·2019-08-26 10:20