摘要:多態訪問成員變量的兩種方式直接通過對象名稱訪問成員變量看等號左邊是誰,優先用誰,沒有則向上找。只用于成員方法,不適用于成員變量。
多態性:
是對對象來說的。extends或implements是多態性的前提。
經理類繼承雇員類。小明是一個經理對象,這個對象既有經理形態,也有雇員形態。一個對象有多種形態,這就是對象的多態性。
多態性格式:父類引用指向子類對象
格式:父類名稱 對象名 = new 子類名稱();
或:接口名稱 對象名 = new 實現類名稱();
可以這樣理解:子類被當做父類來看待(一個經理被當做雇員來看待,一直貓被當做動物來看待)。而對象只能引用父類特有的方法。
多態訪問成員變量的兩種方式:
直接通過對象名稱訪問成員變量:看等號左邊是誰,優先用誰,沒有則向上找。(編譯看左邊,運行還看左邊)
Fu obj = new Zi(); System.out.println(obj.num);
間接通過成員方法訪問成員變量:看該方法屬于誰優先用誰,沒有則向上找。(先看右邊子類中有沒有該方法,沒有則向上找)
多態訪問成員方法:訪問成員方法的規則:看new的是誰,則優先用誰,沒有則向上找(編譯看左邊,運行看右邊)。
先看左邊父類中有沒有該方法,沒有則編譯不通過報錯,但運行時是看右邊子類方法,沒有則向上找。只用于成員方法,不適用于成員變量。
向上轉型和向下轉型在Java中,對象變量是多態的。
Employee e; e = new Employee(...); e = new Manager(...);//Manager繼承Employee
這里的Employee類變量可以引用Employee類對象和任何一個Employee類的子類。
在《JAVA核心技術卷一》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數組是Employee類對象,所以staff可以和boss指向同一對象,且編譯器將staff[0]看成Employee對象。如果是下面這段代碼會報錯,因為不是所有的雇員都是經理(類比double轉換int可能會損失精度)。
向上轉型一定是安全的,從小范圍轉向了大范圍(從小范圍的經理轉向大范圍的雇員,從小范圍的貓轉向大范圍的動物,類似于從小范圍的int轉向大范圍的double不會損失精度)。
對象的向上轉型其實就是多態寫法:
//格式:父類名稱 對象名 = new 子類名稱(); //右邊創建了一個子類對象,把它當做父類看待使用 Employee Manager = new Manager() //創建了一個經理對象,把它當做雇員來看待
向下轉型是一個【還原】的動作,但要保證對象一開始創建的時候 ,就是經理,才能由雇員向下轉型為經理。(用instanceof關鍵字判斷前面的對象是不是后面的類型)
String c = (String)staff[1]; //會產生編譯錯誤,因為String不是Employee的子類
只能在繼承層次內進行類型轉換
將超類轉換成子類(向下轉型)之前,應該使用instanceof進行檢查
類型轉換不是一種好的做法,多態的對象向下轉型是為了使用子類特有的方法,這種情況下應該檢查超類的設計是否合理,也許重新設計超類并添加相應方法才是正確做法。盡量少用類型轉換和instanceof
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75233.html
摘要:概念所謂多態,就是指一個引用變量類型在不同的情況下的多種狀態。需進行強制轉換有風險,最好使用進行判斷。繼承在多態中必須存在有繼承關系的子類和父類。在中有兩種形式可以實現多態繼承和接口。 概念 所謂多態,就是指一個引用變量(類型)在不同的情況下的多種狀態。也可以理解為,多態是指通過指向父類的指針,來調用在不同子類中實現的方法。多態性是對象多種表現形式的體現 多態性嚴格來說有兩種描述形式:...
摘要:面向對象編程思想面向對象,簡單來說就是由動作的執行者變為動作的操控者。面向對象是相對于面向過程的。面向對象三大特征面向對象有三大特征,即封裝繼承和多態。接口和抽象類接口接口名方法方法,默認修飾符為,不能用其他修飾符修飾接口。 面向對象編程思想 面向對象,簡單來說就是由動作的執行者變為動作的操控者。結合具體例子來說就是使用某個人或者工具所具有的功能而不用去管功能的具體實現方式。例如現實中...
閱讀 3585·2023-04-26 01:43
閱讀 2971·2021-10-14 09:42
閱讀 5404·2021-09-30 09:59
閱讀 2172·2021-09-04 16:40
閱讀 1208·2019-08-30 15:52
閱讀 822·2019-08-29 17:09
閱讀 1993·2019-08-26 13:37
閱讀 3432·2019-08-26 10:20