資源描述:
《《Java程序設(shè)計(jì)》輔導(dǎo)資料6》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、大連理工大學(xué)網(wǎng)絡(luò)教育學(xué)院Java程序設(shè)計(jì)輔導(dǎo)資料六主題:第三章Java的多態(tài)性和抽象性(課件)學(xué)習(xí)時(shí)間:2014年11月3日—11月9日內(nèi)容:我們這周主要學(xué)習(xí)《Java程序設(shè)計(jì)》這門課程的第3章最后一部分關(guān)于Java多態(tài)性和抽象性方面的介紹以及依次相關(guān)內(nèi)容。希望通過下面的內(nèi)容能使同學(xué)們對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)語言的整體特性有進(jìn)一步的了解。知識(shí)要點(diǎn):1、多態(tài)的概念2、super的作用3、編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)4、類的抽象性5、抽象類6、最終類重點(diǎn)難點(diǎn):1、super的作用2、編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)3、抽象類4、最終類一、類的多態(tài)性在程序設(shè)計(jì)語言中,多態(tài)性是指“一
2、種定義,多種實(shí)現(xiàn)”。例如,運(yùn)算符“+”有多種含義,究竟執(zhí)行哪種運(yùn)算取決于參加運(yùn)算的操作數(shù)個(gè)數(shù)及數(shù)據(jù)類型。多態(tài)性是面向?qū)ο蟮暮诵奶卣髦?,主要有方法的多態(tài)和類型的多態(tài)。方法的多態(tài)包括方法的重載和覆蓋,為一種功能提供多種實(shí)現(xiàn);類型的多態(tài)表現(xiàn)為,子類是一種父類型。1、子類重定義從父類繼承來的成員當(dāng)子類從父類繼承來的成員不能滿足子類需要時(shí),子類不能刪除它們,但可以重新定義它們,擴(kuò)充父類成員方法的功能,使父類成員能夠適應(yīng)子類新的需求。子類重新定義父類成員包括:重新定義父類的成員變量,則隱藏父類的成員變量;重定義父類的成員方法,如果參數(shù)列表相同則覆蓋父類的成員方法,
3、否則重載。子類重定義父類成員表現(xiàn)出多態(tài)性,父類對(duì)象引用父類成員,子類對(duì)象引用子類成員。重定義的同名成員之間不會(huì)產(chǎn)生沖突和混亂,在子類的成員方法中,如果需要引用被子類隱藏或覆蓋的父類同名成員,可使用super引用,語法格式如下:super.成員變量super.成員方法([參數(shù)列表])2、類型的多態(tài)子類通過繼承方式擴(kuò)充和發(fā)展了它的父類,繼承約定了子類與父類之間存在的isA關(guān)系,子類是父類的一種特殊類型。第5頁共5頁大連理工大學(xué)網(wǎng)絡(luò)教育學(xué)院isA關(guān)系與hasA關(guān)系不同,hasA關(guān)系表示一個(gè)對(duì)象使用另一個(gè)對(duì)象來存儲(chǔ)自身的狀態(tài)。子類對(duì)象即是父類對(duì)象子類對(duì)象包含了父
4、類的所有成員變量,isA關(guān)系表現(xiàn)為繼承具有“即是”性質(zhì):子類對(duì)象即是父類對(duì)象。反之不然,父類對(duì)象不是它的子類對(duì)象。使用對(duì)象運(yùn)算符instanceof可以判斷一個(gè)對(duì)象是都屬于指定類及其子類,例如:newPerson()instanceofPreson//結(jié)果是truenewStudent()instanceofPerson//結(jié)果是true,子類對(duì)象即父類對(duì)象newPerson()instanceofStudent//結(jié)果是false,父類對(duì)象不是子類對(duì)象父類對(duì)象引用子類實(shí)例子類對(duì)象即是父類對(duì)象,表現(xiàn)為父類與子類之間具有賦值相容性,即父類對(duì)象能夠引用子類實(shí)
5、例,反之不行。例如:Personp=newStudent();//賦值相容,子類對(duì)象即是父類對(duì)象Strudents=newPerson();//語法錯(cuò),賦值不相容,父類對(duì)象不是子類對(duì)象再擴(kuò)展到Object類,由于所有類都是Object的子類,所以,一個(gè)Object對(duì)象能夠引用任何類的實(shí)例。3、編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)根據(jù)何時(shí)確定執(zhí)行多態(tài)方法中的哪一個(gè),多態(tài)分為兩種情況:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。如果在編譯時(shí)能夠確定執(zhí)行多態(tài)方法中的哪一個(gè),稱為編譯時(shí)多態(tài);否則稱為運(yùn)行時(shí)多態(tài)。編譯時(shí)多態(tài)方法重載都是編譯時(shí)多態(tài)。根據(jù)實(shí)際參數(shù)的數(shù)據(jù)類型、個(gè)數(shù)和次序,Java編譯時(shí)能
6、夠確定重載方法中的哪一個(gè)。方法覆蓋表現(xiàn)出兩種多態(tài)性,當(dāng)對(duì)象引用本類實(shí)例時(shí),為編譯時(shí)多態(tài),否則為運(yùn)行時(shí)多態(tài)。運(yùn)行時(shí)多態(tài)以下聲明父類對(duì)象p2引用子類實(shí)例:Personp2=newStudent(“張小莉”,newMyDate(1989,1,5));System.out.println(“p2:”+p2.toString());p2.toString()究竟執(zhí)行誰的toString()方法?從編譯角度看,p2聲明為Person對(duì)象,而Person類聲明了toString()方法,所以p2.toString()執(zhí)行Person類的toString()方法,沒有編
7、譯錯(cuò)誤。Java支持運(yùn)行時(shí)多態(tài),意為p2.toString()實(shí)際執(zhí)行p2所引用實(shí)例的toString()方法。究竟是Person類或Student類的方法,運(yùn)行時(shí)再?zèng)Q定。如果Student類聲明toString()方法,則執(zhí)行之;否則,執(zhí)行Person類的toString()方法。4、多態(tài)的方法實(shí)現(xiàn)多態(tài)的toString()方法Object類的toString()方法聲明如下,它返回由當(dāng)前對(duì)象所屬類名和十六進(jìn)制的哈希碼組成的描述對(duì)象信息的字符串:publicStringtoString()第5頁共5頁大連理工大學(xué)網(wǎng)絡(luò)教育學(xué)院{ReturngetClas
8、s().getName()+"@"+Integer.toHexString(ha