bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Java面向對象【基本特征之多態】-創新互聯

前言

封裝是面向對象的基礎; 繼承是在封裝的基礎上,實現代碼的復用性;

創新互聯專注于尤溪企業網站建設,成都響應式網站建設,商城開發。尤溪網站建設公司,為尤溪等地區提供建站服務。全流程按需求定制設計,專業設計,全程項目跟蹤,創新互聯專業和態度為您提供的服務

而多態考量的是代碼的豐富度。

多態的含義:

相同的行為,不同的實現。

(比如:買菜,買青菜買白菜都是買菜行為)

條件:

1.有繼承

2.有同名方法

注意:

1、多態指的是行為的多樣性,沒有屬性多態這一說;

2、相同的行為指的是同名方法,也就是說方法名相同,我們就認為這是相同的行為。

由此,我們前面學習的方法重載和方法重寫其實都是(靜態)多態的表現。


多態分為兩種: 靜態多態

在編譯期間就可以確定要執行的是何種類型的對象以及該對象的何種行為,運行期不會有改變的情況。

我們在前面學過的方法的重載和方法的重寫都是屬于靜態多態。靜態多態雖然有豐富度的體現,但是是不夠的,因為它在編譯期就把執行效果固定下來了。而我們以后用得更多的是動態多態。

動態多態

在運行期,根據綁定對象的不同,才能確定多態方法執行的效果。

動態多態是由兩個技術合并使用才有的效果:動態綁定技術 + 方法的重寫。 ?

動態綁定技術 從現象上看效果:

本類引用 指向 本類對象;

父類引用 指向 子類對象;

在Java當中只有這兩種情況,也就是說賦值符號左右兩端如果類型不一致,那么只有后面這種情況。

從內存上解釋

為什么父類引用可以指向子類對象呢?

既然是父子關系,還是在做繼承,那么還是跟內存疊加有關系。

每一個子類對象的上半截都是一個完整的父類對象部分,當父類引用指過去的時候,是能夠看到完整的父類對象信息的。

沒有繼承關系的類,不能保證A類引用指到B類對象,能看到B類對象中有A類定義的內容,所以不允許!

子類引用指向父類對象的時候,父類對象里面沒有子類特有部分,所以缺失了內容,也不允許!

從場景上解釋

一個對象屬于子類,一定也屬于它的父類。子和父是is-a關系,這是說得通的。

但是一個對象屬于父類,你能保證它一定屬于子類嗎?

而沒有繼承關系的,那就更說不通的了,比如:指鹿為馬。 明明是一個鹿的對象,你偏要用馬的引用去指向它,肯定是不對的。你可以說它是動物、可以說它是寵物、因為鹿is-a動物;鹿 is-a 寵物;都是可行的,但鹿 is not a 馬。

動態體現在哪兒?

如果我們手上現在擁有一個父類引用,那么我們就不能確定這個引用到底是指向哪一個具體的對象的了。

它既可能指向自己類型的對象,也可能指向自己的各種子類對象。

而自己的某個方法,是可以被子類重寫成不同的實現效果的。那么用這個引用執行重寫方法,也就不能確定到底重寫前還是重寫后,是A子類重寫后,還是其它子類重寫后的效果了。只有等程序運行起來以后,根據該引用具體綁定的對象到底是誰,才能夠運行出具體的效果。--- 這就是動態的體現。

轉型技術

賦值符號左右兩端數據類型不一致,就會發生數據類型轉換。

父類引用 = 子類對象 也是兩端數據類型不一致,所以也屬于轉型技術。

基本數據類型轉型技術和引用數據類型轉型技術 基本數據類型轉型技術

1、前提:不是所有基本數據類型之間都能夠進行轉型,boolean不參與的;

2、自動類型轉換 小類型值 賦值給 大類型的變量

強調:這里的大小 是 數據類型能表示的范圍的大小,而不是空間的大小。

int num = 'A'; float f = num; double d = 100;

效果:不需要使用任何特殊語法,直接完成類型轉換并且賦值成功。

3、強制類型轉換 大類型的值 賦值給 小類型的變量

效果:

3-1、直接書寫后,編譯報錯;

3-2、使用(目標類型)的強轉語法,編譯才能夠通過;

3-3、運行的效果是有風險性的,精度有可能丟失。

引用數據類型轉型技術

1、前提:不是所有引用數據類型之間都能夠做轉型,只有有繼承關系的類型之間才可以;

2、自動類型轉換 子類對象 賦值給 父類引用 子類表示的范圍 是小于 父類表示的范圍,所以仍然是把小的數據值交給大的變量。與基本數據類型的自動轉換要求是一摸一樣的。

只是說它有另一個特殊的名字,又叫做“向上轉型”而已。因為在繼承樹上,父類在上,子類在下;

效果:不需要使用任何特殊語法,直接完成類型轉換并且賦值成功。

3、強制類型轉換 大類型的值 賦值給 小類型的引用? 又被稱為"向下轉型".

效果:

1、直接書寫后,編譯報錯;

2、使用(目標類型)的強轉語法,編譯才能夠通過;

3、運行的效果是有風險性的,風險性是運行時報錯(ClassCastException),中斷程序的執行。

對風險性探討:

1、我們發現并不是每次強轉都一定成功,那么情況時如何的呢?

要想強轉以后,編譯通過且運行也通過,只有一種情況,那就是:最終的內存結果只能是本類引用指向本類對象。

2、強轉語法只是在編譯期進行一個強制性的語法說明,說明什么呢?告訴編譯器,我這個父類引用確實是指向的某種子類對象。

3、但是運行起來以后,如果滿足你的強制說明,那么沒有問題運行成功;如果不滿足你的強制說明(欺騙了編譯器),那么就會運行失敗,報出ClassCastException。

比如:水果類? 香蕉類? 豬肉類? 香蕉類強轉水果類? 可以成功? 但是豬肉類和水果類不是is-a關系,所以豬肉類強轉 水果類會運行失敗。

強調:強轉語法不是把A類對象變成B對象,只是在編譯期達成的一個口頭約束而已。

父類引用指向子類對象,我們能訪問什么呢?

1、父類引用只能看到子類對象從父類繼承而來的屬性和行為,當然要受訪問修飾符限制;注意:子類對象身上是有子類特有屬性和行為的,只是站在父類引用的角度上看不到而已。

2、要想看到,要把引用換成子類引用,這個時候要使用強轉語法,同時還必須保證運行起來以后真正給出的對象是符合強轉語法的。

3、特例是在父類中定義,被子類重寫的行為。由于這個行為是定義在父類中,所以父類引用能看到;而對象又是子類對象,所以執行的效果是子類重寫后的效果。

練習:書寫一個寵物類Pet,擁有一個叫的行為;書寫Pet的兩個子類Dog和Cat,分別實現叫的行為。再書寫一個主人類Master,擁有一個寵物對象,主人有一個行為是喂養feed,在該方法中調用自己寵物叫的行為。最后,在main方法中測試。

instanceof

在練習當中,我們看到在有的場景里面,確實會存在需要強轉的情況。但是,強轉又有風險度,所以,我們需要先判斷類型是否匹配,這就要用到instanceof了。

instanceof是一個關鍵字,也是一個運算符。它是專門用來判斷一個對象是否屬于某個類型的,運算后的結果是boolean型結果。

語法: 對象 instanceof 類型

instanceof是專門用來規避強轉帶來的ClassCastException風險的,類似于非空判斷專門用來解決NullPointerException風險的。

多態的應用

多態參數

當我們在設計參數的時候,把參數的類型設計為父類類型,那么所有的子類對象都能夠通過這個參數,傳遞到這個方法里面去。

這樣的多態應用帶來了面向對象設計中非常重要的一個原則:開閉原則。

開閉原則:Software should be opened for extension, but closed for modification。

軟件對于擴展來說應該是開放的,對于修改來說應該是關閉。

也就是說好的軟件設計,應該能夠可以隨著業務的擴展去增加新的功能,但是不應該修改已有的功能。

多態集合

int[] array = new int[10];

Object[] arrayObj = new Object[10];

可以解決數組只能存放同一數據類型元素的問題。

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

新聞名稱:Java面向對象【基本特征之多態】-創新互聯
本文地址:http://vcdvsql.cn/article16/jesdg.html

成都網站建設公司_創新互聯,為您提供App開發品牌網站設計營銷型網站建設外貿建站自適應網站全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司