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