多態、抽象類

多態、抽象類

多態:

  多態:多種形式;

    多態是指一個對象有多種形式的能力;

     多態描述:相同的行為;不同的實現;

  多態分類:

    靜態多態:程序在編譯時,系統就能決定調用哪個方法,所以稱為編譯時多態;實現的方式就是方法的重載,調用規則是依據對象在定義時的類型相應的調用對應類中的重載方法;

    動態多態:在運行中系統才能動態確定方法所指的對象,所以稱為運行時多態,實現的方式是重寫父類中的同名成員方法,動態多態主要是通過動態綁定和重寫機制來實現。

  技術基礎:

 1、向上轉型技術:一個父類的引用變量可以指向不同的子類對象,或者一個子類對象可以被當做一個父類類型;

 2、instanceof關鍵字:instanceof關鍵字用于判斷運行時對象的真正類型;

 3、動態綁定技術:運行時根據父類引用變量所指對象的時機類型執行相應的子方法,從而實現多態性;

  基本數據類型的轉型:

 1、自動類型轉換、隱式轉換、從小范圍的數據類型往大范圍的數據類型轉換

  無風險/肯定成功;

int a = 'b';
double f = 254;

 2、強制類型轉換、顯式轉換、從大范圍的數據往小范圍的數據類型轉換

  有風險/丟失精度/無意義

a = (int)3.14;
char c = (char)12345670;

  引用數據類型的轉換——只有有繼承關系的類才能使用類型轉換

public class PetBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

?

public class DogBean extends PetBean {private int boneNum;public int getBoneNum() {return boneNum;}public void setBoneNum(int boneNum) {this.boneNum = boneNum;}} 
public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub

 1、向上類型轉換、自動類型轉換、隱式類型轉換、從小范圍的數據類型往大范圍的數據類型轉換

  無風險\肯定成功

        PetBean p = new PetBean();//父類的引用可以指向子類的對象

 2、向下類型轉換、強制類型轉換、顯式轉換、從大范圍的數據往小范圍的數據類型轉換

  有風險/可能會拋出異常,終止程序的運行

  只有運行起來后,確實是本類引用指向本類對象或父類引用指向子類對象才可以成功

        DogBean dog = (DogBean)p;

  多態應用——多態參數:

    多態參數就是當方法的某個形式參數是一個引用的時候,與該引用兼容的任何對象都可以傳遞給方法,從而允許方法接受不同數據類型的形式參數。

  多態應用——異構集合:

    多態另一個常見應用是穿件一個不是同一類型,但是有共同父類的數據集合,不同對象的集合稱為異構集合。

 

多態小結:

  使用父類類型的引用指向子類的對象;

  該引用只能調用父類中定義的方法,不能調用子類中獨有的方法;

  如果子類中重寫了父類中的一個方法,那么在調用該方法的時候,將會調用子類中的這個方法;

  在多態中,子類可以調用父類中的所有方法;

?

抽象類:

  將一個方法聲明為抽象方法有兩個結果:

 1、類也必須聲明為抽象類,如果一個類包含了一個抽象方法,那么該類也必須是抽象類;

 2、任何子類必須重寫抽象方法,除非子類本身也是抽象類;

  關鍵字: abstract;用這個關鍵字修飾類的時候,表示這個類是抽象類;

   注: 抽象類不能產生對象,它只能充當父類;

  1、有抽象方法的類一定是抽象類;

  2、抽象類不一定有抽象方法;

  3、抽象類除了類有abstract修飾符,它內部跟普通類一樣,可以有:屬性、構造、已經實現的方法;

例:

public class Boy {private Girl myGirl;public Girl getMyGirl() {return myGirl;}public void setMyGirl(Girl myGirl) {this.myGirl = myGirl;}public void kiss(){System.out.println("讓我親一個嘛~~~");this.myGirl.response();}
}
public abstract class Girl {//abstract關鍵字表示抽象//當它修飾方法的時候,表示類有這個方法,但是不能確定這個方法的實現,應該由它的子類去確定public abstract void response();}
public class PureGirl extends Girl {

        //子類在繼承抽象類的時候,必須重寫抽象類的抽象方法。
        //否則這個子類也必須是抽象類。

	@Overridepublic void response() {// TODO Auto-generated method stubSystem.out.println("嗯~~~你好壞~~~");}}
public class BoldGirl extends Girl {

        //子類在繼承抽象類的時候,必須重寫抽象類的抽象方法。
        //否則這個子類也必須是抽象類。

	@Overridepublic void response() {// TODO Auto-generated method stubSystem.out.println("老娘飛起來一腳~~~~");}}
public class TestLove {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubBoy boy = new Boy();System.out.println("請選擇你喜歡的女孩類型:1、純情;2、野蠻。");int choice = new Scanner(System.in).nextInt();Girl girl = null;switch(choice){case 1:girl = new PureGirl();break;case 2:girl = new BoldGirl();break;}boy.setMyGirl(girl);boy.kiss();}}

?

  

  

posted on 2016-12-10 14:53 ai喲 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/scxu28/p/6155709.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 首頁布局變換,Android XML布局與View之間的轉換

Android的布局方式有兩種,一種是通過xml布局,一種是通過java代碼布局,兩種布局方式各有各的好處,當然也可以相互混合使用。很多人都習慣用xml布局,那xml布局是如何轉換成view的呢?本文從源碼的角度來簡單分…

C++的ORM工具比較

用過Java的都知道SSH框架,特別對于數據庫開發,Java領域有無數的ORM框架,供數據持久層調用,如Hibernate,iBatis(現在改名叫MyBatis),TopLink,JDO,JPA……非常方便實用。用過C#的同學們…

電腦技巧:Win10自帶存儲感知功能給電腦磁盤瘦身

今天給大家分享Win10自帶存儲感知功能給電腦磁盤瘦身功能,希望對大家能有所幫助!1、什么是存儲感知Win10存儲感知功能屬于Win10操作系統的一大亮點,自帶有AI的存儲感知功能發揮其磁盤清理功能,它可以在操作系統需要的情況下清理不…

線程的優先級

setPriority(); 設置線程的優先級Thread類里面的 MIN_PRIORITY 1 表示最小優先級 NORM_PRIORITY 5 表示默認優先級 MAX_PRIORITY 10 表示最大優先級

電腦存儲:A盤、B盤知識介紹,為何總是電腦磁盤從C盤開始

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

使用axis發送xml報文,返回并解析報文實例

前段時間剛好學了一點webservice,因此想和大家分享一下我的成果,因為能力原因,只能做個小實例,望大家見諒! 此實例的思路是:(1)用String類型構造好需要發送的報文;(2)使用axis調用服…

某游戲在華為鴻蒙,華為鴻蒙系統運行安卓游戲出現新狀況!安卓換皮論被徹底打臉?...

雖然華為鴻蒙系統已經經過幾輪的測試,準備在6月份大規模推送正式版本了,但現在依然還有一些雜音不絕于耳。最主要的爭議點還是老生常談的”鴻蒙系統到底是不是安卓系統的換皮“。支持鴻蒙系統安卓換皮的一方拿出過不少證據,比如安裝包還是APK…

java為什么還需要分布式鎖?

什么是鎖? 在單進程的系統中,當存在多個線程可以同時改變某個變量(可變共享變量)時,就需要對變量或代碼塊做同步,使其在修改這種變量時能夠線性執行消除并發修改變量。 而同步的本質是通過鎖來實現的。為了…

電腦技巧:電腦插上U盤就死機或重啟原因和解決辦法

大家平時將u盤或其他可移動設備連接電腦插口的時候,不少電腦小白都碰到過操作系統自動重啟甚至出現電腦死機的尷尬情況。針對u盤等外部設備連接引起的電腦死機問題,我們應該根據具體問題具體分析,找到原因就可以解決掉。接下來小編帶大家看看…

使用UGUI繪制自定義幾何圖形

本文展示了如何使用UGUI繪制矩形,同理可繪制其他幾何圖形。 UGUI的渲染體系,簡單來說所有的控件和可顯示的元素都是Graphic。Graphic持有一個CanvasRenderer,通過SetVertices設置頂點,最終完成繪制。 舉例來說,Image控…

android t類型參數,android – Kotlin屬性:“屬性的類型參數必須在其接收器類型中使用”...

我有以下簡單的Kotlin擴展功能:// Get the views of ViewGroupinline val ViewGroup.views: Listget() (0..childCount - 1).map { getChildAt(it) }// Get the views of ViewGroup of given typeinline fun ViewGroup.getViewsOfType() : List {return this.views…

電腦技巧:分享七個解決煩人的彈窗廣告的小技巧

目錄 1、及時卸載用不到的垃圾軟件 2、修改軟件設置(關閉不需要的資訊、廣告) 3、開機啟動項中禁用不需要的應用 4、刪除彈窗廣告程序 5、提高操作系統阻止級別 6、禁止彈窗廣告的任務計劃 7、安裝火絨殺毒軟件設置彈窗廣告攔截 最后總結 很多朋友經常會…

MySQL+Amoeba實現數據庫主從復制和讀寫分離

MySQL讀寫分離是在主從復制的基礎上進一步通過在master上執行寫操作,在slave上執行讀操作來實現的。通過主從復制,master上的數據改動能夠同步到slave上,從而保持了數據的一致性。實現數據的讀寫分離能帶來的好處有: 增加物理服務…

從操作系統層面描述線程的五種狀態

[初始狀態] 僅是在語言層面創建 了線程對象, 還未與操作系統線程關聯 [可運行狀態] (就緒狀態) 指該線程已經被創建(與操作系統線程關聯), 可以由CPU調度執行 [運行狀態] 指獲取了CPU時間片運行中的狀態 當CPU時間片用完,會從[運行狀態]轉…

html桌面圖標樣式,如何更改圖標樣式,換桌面圖標的方法

打開桌面,桌面上擺放了放多程序的快捷方式,我們每天打開電腦最先接觸的就是這些快捷方式圖標。時間長了,是不是感覺乏味了。可以換一換。比如,在我的電腦桌面上有這樣一個圖標,那怎樣更改桌面圖標?下面&…

電腦知識:筆記本電腦邊充電邊用,對電池有損害嗎?

使用筆記本的時候,你們有沒有這樣的習慣,就是插電使用,充滿到100%也不會拔掉充電頭。 有人說這種行為會對電腦的電池造成傷害,這是真的嗎?到底正確的使用是怎么樣的?今天就跟大家解答一下這個疑惑。 首先&a…

硬件知識:電源開關上的“1“和“0“分別是什么意思

幾乎所有的電器、燈具和插座上 只要帶有電源開關 必然會出現“|”和“O”兩個符號 如果只看符號判斷 “|”和“O”到底代表什么含義呢? 你又能分清哪個是電路聯通 哪個是電路斷開嗎? 很多人認為“O”是通電,“|”是斷電 因為英語里開是OPEN 很…

c# 正則表達式 html標簽,C#匹配HTML標簽,正則表達式誰會?

米脂JS:function StripHtml(html){var scriptregex ".]*>[sS]*?";var scripts new RegExp(scriptregex, "gim");html html.replace(scripts, " ");//Stripts the ";var styles new RegExp(styleregex , "gim");html htm…