多態(tài)小結

第一點:
多態(tài)的確定:在程序中,多態(tài)就是用父類的引用指向子類 的對象 例如:Person p = new Student(); Person是父類,Student是子類

第二點:
工作的機制:1、先通過p保存的地址找到Student對象 2、再使用Student對象去工作,實際工作的是對象

第三點:繼承和多態(tài)中調(diào)用成員變量和成員方法比較
情景:父類:Person 子類:Teacher和Student
多態(tài)的前提是繼承,所以有以下繼承
class Person{}
class Teacher extends Person{}
class Student extends Person{}
(1)表現(xiàn)形式:
繼承:Teacher teacher = new Teacher();
多態(tài):Person person = new Teacher();
相同點:對象都是子類(即new Teacher())
不同點:繼承中的引用類型與對象的類型相同(此處是子類Teacher)
多態(tài)中的引用類型是對象類型的父類(此處是Teacher的父類Person的引用)
所以,在調(diào)用成員變量和成員方法中,通過子類類型調(diào)用就是繼承,通過父類類型調(diào)用就是多態(tài)

(2)調(diào)用成員變量
繼承:通過繼承調(diào)用成員變量,調(diào)用順序為子類--->父類--->父類的父類--->...--->基類,知道找到為止就不再向下尋找,此處形式為:teacher.成員變量

多態(tài):通過多態(tài)調(diào)用成員變量,只會且只能調(diào)用父類里面的成員變量,不管是否會向下轉型(向下轉型的目的只是為了用父類的引用來調(diào)用子類特有的方法),如果父類中有該成員變量則對其賦值,否則,編譯錯誤,此處形式為:person.成員變量

(3)調(diào)用成員方法(非靜態(tài)成員方法)
繼承:通過繼承調(diào)用成員方法,調(diào)用順序為子類--->父類--->父類的父類--->...--->基類,知道找到為止就不再向下尋找,此處形式為:teacher.成員方法

多態(tài):
①通過多態(tài)調(diào)用成員方法,如果父類與子類有相同方法名的方法,則不需要向下轉型即可調(diào)用子類的方法(因為最后工作的還是對象,即new Teacher(),如果父類有相同的方法名,則 person.成員方法 只是編譯用,并沒有運行,當運行的時候,就通過對象new Teacher()來調(diào)用成員方法)
②如果通過父類引用要調(diào)用子類中獨有的方法時,就需要向下轉型(強制將父類的引用類型轉成子類的引用轉型:Teacher teacher = (Teacher)person,然后用 teacher.成員方法 來調(diào)用子類特有的方法);

(4)調(diào)用靜態(tài)方法
不管是父類中靜態(tài)方法還是子類的靜態(tài)方法,通過相應的類名調(diào)用即可,是可以實現(xiàn)繼承的

注意:靜態(tài)屬性、靜態(tài)方法和非靜態(tài)的屬性都可以被繼承和隱藏而不能被重寫,因此不能實現(xiàn)多態(tài),不能實現(xiàn)父類的引用可以指向不同子類的對象。非靜態(tài)方法可以被繼承和重寫,因此可以實現(xiàn)多態(tài)。

第四點:
如果一個方法中需要傳入的是Cat的實參,但客戶輸入了Dog類型的實參,這時候就需要做容錯處理,使用instanceof關鍵字(構成: 對象 instanceof 類 結果兩個:true/false):
if(animal1 instanceof Cat){
//干貓的活
}
實際工作中寫成下面這樣:
if(?。╝nimal1 instanceof Cat)){

    }

//干貓的活
在多態(tài)的前提下,當確定傳過來的對象確定是Cat的對象,再去干貓的活,否則直接跳過干下面的工作,這樣做可以保證當前位置發(fā)生的問題不影響整個程序的運行,做一個預防的工作---容錯處理.---增加用戶的體驗

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

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

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • Scala與Java的關系 Scala與Java的關系是非常緊密的?。?因為Scala是基于Java虛擬機,也就是...
    燈火gg閱讀 3,608評論 1 24
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,648評論 1 32
  • 第二輯 行動——尋找改變你的核心力量 2017.07.03 6種全能核心的能力左右你的前程 在丹尼爾 平克的《全能...
    Ceeport智慧如雪閱讀 407評論 0 0
  • 幸福路人春風20171115第164天 今天晚上讀父母規(guī),女兒說停停停,然后指著第一條說,你不是說要多鼓勵贊美孩子...
    春風7861閱讀 293評論 0 0

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