java開課吧0604.對象多態(tài)性_第1頁
java開課吧0604.對象多態(tài)性_第2頁
java開課吧0604.對象多態(tài)性_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論