


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、知識點:對象多態(tài)性1、 對象的向上2、 對象的向下;。2、具體內(nèi)容在講解對象的操作之前首先來觀察以下的一段代碼。方法的覆寫為對象多態(tài)性的最重要支持,于是下面就可以給出對象多態(tài)性的操作方式,分為兩類:對象的向上|- 自動完成;對象的向下:父類名稱 對象名稱 = 子類實例化對象;:子類名稱 對象名稱 = (子類名稱) 父類對象;|- 強制完成,強制完成就會造成風(fēng)險。范例:對象向上第(1)頁 共(8)頁class A class A public void fun() System.out.prln(A public void fun() ;class B extends A public vo
2、id fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) B b = new B() ;C c = new C() ;b.fun() ;c.fun() ;同一個對象根據(jù)實例化其子類的不同,同一個方法可以完成不同的功能。范例:實現(xiàn)向下第(2)頁 共(8)頁class A public void fun() Sys
3、tem.out.prln(A public void fun() ;class B extends A public void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) / 父類 父類對象 = new 子類() ; A a = new B() ;/ 子類 子類對象 = (子類) 實例化對象B b =
4、(B) a ;b.fun() ;public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) / 父類 父類對象 = new 子類() ; A a =
5、new B() ;a.fun() ;但是在進行對象向下時是會存在有風(fēng)險的,譬如:來觀察以下的程序。此時沒有語法錯誤,但是執(zhí)行的時候出現(xiàn)了錯誤:對于開發(fā)而言,NullPoerException 最為常見的異常,而 ClassCastException 指的對象的轉(zhuǎn)換異常,即:兩個沒有關(guān)系的對象發(fā)生了錯誤的轉(zhuǎn)換操作。結(jié)論:在對象發(fā)生向下操作之前,一定要首先發(fā)生對象的向上,建立好關(guān)系后才可以正常使用,關(guān)于對象的實際使用情況:向上:90%,在大部分情況下使用的全部都是對象的向上;向下:3%,很少會使用向下,因為只有在使用子類特殊功能的時候才會考慮向下;不:7%,String。什么叫類的特殊功能?子類的
6、主要功能是進行父類功能的擴充,所以下面就通過擴充來演示何為子類的特殊操作需要進行向下。第(3)頁 共(8)頁class A public void fun() System.out.prln(A public void fun() ;Exceptionhread main java.lang.ClassCastException: A cannot be cast to Bat TestDemo.maestDemo.java:19)class A public void fun() System.out.prln(A public void fun() ;class B extends A p
7、ublic void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new A() ;/ 實例化父類對象B b = (B) a ; / 向下b.fun() ;從開發(fā)的角度來講,對于子類的特殊功能,強烈建議:如果能不調(diào)用就不調(diào)用,如果非要調(diào)用,那么請的父類設(shè)計的足夠完善。在開發(fā)之中 90%的情況
8、下,子類之中所定義的方法是與父類中所定義的方法完全相同的。第(4)頁共(8)頁class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠攏System.out.prln(Bpublic void fun() ;/ 是子類擴充的方法public void prB() / 非方法System.out.prln(B public void prB() ;class C extends A class B extend
9、s A public void fun() System.out.prln(Bpublic void fun() ;/ 是子類擴充的方法public void prB() System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 a.fun() ;B b = (B) a ; / 向下b.
10、prB() ;另外,在進行對象的向下操作之中會發(fā)現(xiàn)是存在有安全隱患的,所以為了避免這種情況的發(fā)生,在 java 中提供了一個 instanceof 的關(guān)鍵字,此關(guān)鍵字的作用是判斷某一個對象是否為某一個類的實例,語法如下:第(5)頁 共(8)頁class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠攏System.out.prln(Bpublic void fun() ;/ 是子類擴充的方法public voi
11、d prB() / 非方法System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 System.out.prln(a instanceof A) ;System.out.prln(a instanceof B) ;if (a instanceof B) / 如果是 B 類實例B b =
12、 (B) a ; / 向下b.prB() ;對象 instanceof 類 返回的是型數(shù)據(jù)public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 a.fun() ;如果要想編寫更安全的代碼,則在以后進行對象向下時,都要利用 instanceof 實現(xiàn)判斷。疑問?怎么使用對象多態(tài)性,下面通過一個簡單的程序模擬一下,譬如:現(xiàn)在要求定義一個方法,此方法之中可以傳遞 A 類的任意子類對象。面對這樣的實
13、現(xiàn),如果不使用對象多態(tài)性,那么可以利用方法的重載完成。但是如果說現(xiàn)在 A 類有 5000W 個子類,并且還可能隨時進行各種擴充,這種代碼寫不了了。最麻煩的事情是參數(shù)沒有。范例:利用對象多態(tài)性來解決第(6)頁 共(8)頁class A class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠攏System.out.prln(Bpublic void fun() ;/ 是子類擴充的方法public void pr
14、B() / 非方法System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) get(new B() ;get(new C() ;public sic void get(B b) b.fun() ;public sic void get(C c) c.fun() ;不管有多少個子類,get()方法接收的是父類對象,所以參數(shù)得到了
15、中,父類一定要優(yōu)先考慮設(shè)計完整。,也就是說在日后的開發(fā)之通過本節(jié)的內(nèi)容相信大家已經(jīng)清楚了對象多態(tài)性的基本操作語法,在開發(fā)之中一定要本著盡量使用向上的操作原則,同時對象多態(tài)性,作為日后課程內(nèi)容的重要組成,一定要將其基本使用原則掌握熟練。第(7)頁 共(8)頁public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠攏System.out.prln(Bpublic void fun() ;/ 是子類擴充的方法public void prB() / 非方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖北省初中學(xué)業(yè)水平考試化學(xué)模擬試卷(五) (學(xué)生版)
- 仲愷農(nóng)業(yè)工程學(xué)院《語言服務(wù)與創(chuàng)新創(chuàng)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 濮陽石油化工職業(yè)技術(shù)學(xué)院《勞動實踐與人生價值》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江工商職業(yè)技術(shù)學(xué)院《測繪數(shù)據(jù)處理課程設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 莆田學(xué)院《社會學(xué)與生活》2023-2024學(xué)年第一學(xué)期期末試卷
- 昆明衛(wèi)生職業(yè)學(xué)院《阿拉伯語語法》2023-2024學(xué)年第二學(xué)期期末試卷
- 無錫職業(yè)技術(shù)學(xué)院《鋼琴教學(xué)法》2023-2024學(xué)年第一學(xué)期期末試卷
- 山西財經(jīng)大學(xué)《企業(yè)資源計劃(ERP)》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏職業(yè)技術(shù)學(xué)院《西醫(yī)外科》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海中華職業(yè)技術(shù)學(xué)院《土壤科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 小學(xué)語文“的、地、得”專項練習(xí)(附答案)
- 《Linux系統(tǒng)管理與配置》課件-項目三-任務(wù)5-Linux防火墻
- 2024至2030年中國去中心化標識符(DID)市場現(xiàn)狀研究分析與發(fā)展前景預(yù)測報告
- 2024-2030年中國社區(qū)醫(yī)院行業(yè)市場發(fā)展分析及前景趨勢與投資研究報告
- 脫硫技術(shù)方案鈉堿法脫硫
- 民兵思想政治教育教案
- (正式版)JTT 1218.5-2024 城市軌道交通運營設(shè)備維修與更新技術(shù)規(guī)范 第5部分:通信
- Python少兒編程全套教學(xué)課件
- MOOC 宇宙簡史-南京大學(xué) 中國大學(xué)慕課答案
- 少先隊輔導(dǎo)員技能大賽培訓(xùn)
- 2024年高等教育經(jīng)濟類自考-06270技術(shù)經(jīng)濟學(xué)筆試參考題庫含答案
評論
0/150
提交評論