資源描述:
《《繼承與多態(tài)》PPT課件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第4章繼承與多態(tài)上一章主要闡述了類和對象的概念。本章將學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)中兩個重要的概念—繼承和多態(tài)。利用繼承,可以基于已經(jīng)存在的類構(gòu)造新類,還可以在新類中添加一些新的成員或修改繼承了的成員,以滿足新的需求。而多態(tài)是在繼承的基礎(chǔ)上引出的,可以解決子類父類中的成員重名問題。4.1繼承概述利用繼承可以很好地實(shí)現(xiàn)代碼重用問題。在利用已有的類構(gòu)造新類時,新類保留已有類的屬性和行為,并可以根據(jù)要求添加新的屬性和行為。例如,卡車具有一般汽車的屬性,而特有的屬性就是載貨。在第3章中,曾經(jīng)介紹過類之間的關(guān)系:“USES-A”關(guān)系、“HAS-A”關(guān)系、“IS-A”關(guān)系。其中,“IS-A”
2、關(guān)系是繼承的一個特征。4.1.1超類、子類被繼承的類一般稱為“超類”或“父類”,繼承的類稱為“子類”。當(dāng)子類繼承超類時,不需聲明該類繼承了的已定義的超類的實(shí)例變量和方法,子類體內(nèi)只需寫出新增的變量和方法即可。超類、子類是繼承中非常重要的概念,它們形象地描述了繼承的層次關(guān)系。繼承節(jié)省了定義新類的大量工作,可以方便地重用代碼。例如,把汽車作為父類,當(dāng)創(chuàng)建汽車的子類轎車時,品牌、價格、最高時速等屬性會自動地被定義,調(diào)用剎車方法時會自動調(diào)用在汽車類中定義的剎車方法。但一個子類不必非要使用繼承下來的屬性和方法,一個子類可以選擇覆蓋已有的屬性和方法,或添加新的屬性和方法。4.1.2繼
3、承層次繼承關(guān)系可以用樹形層次表達(dá)出來。為汽車類的繼承層次關(guān)系,注意,汽車類定義了品牌、價格、最高時速等屬性(成員變量),以及剎車、啟動等方法。當(dāng)定義繼承汽車類的子類卡車時,它自動繼承汽車類的屬性和方法。繼承只是代碼重用的一種方式,濫用繼承會造成很嚴(yán)重的后果。只有當(dāng)需要向新類添加新的操作,并且把已存在類的默認(rèn)行為融合進(jìn)新類中時,才需要繼承已存在的類。4.2Java中的繼承在Java中,實(shí)際上所有的類均直接或間接繼承自java.lang.Object類,也可以說Object類是Java中的總根類。實(shí)際開發(fā)中,如不特殊指定,開發(fā)人員自己定義的類均直接繼承自O(shè)bject類。4.2
4、.1派生子類在Java中,類的繼承通過entends關(guān)鍵字實(shí)現(xiàn)。在創(chuàng)建新類時,使用extends指明新類的父類,具體語法如下。class子類名extends父類名{子類類體}4.2.2繼承規(guī)則當(dāng)類B成功繼承類A后,就涉及到成員變量的繼承問題。下面將從兩個方面介紹成員變量繼承的相關(guān)知識,主要包括成員變量的繼承規(guī)則與成員變量的隱藏。1.成員變量的繼承規(guī)則2.成員變量的隱藏對于成員變量來說,當(dāng)子類本身具有與繼承自父類的成員變量名稱相同的成員變量時,便構(gòu)成了成員變量的隱藏。其含義是,在子類中直接調(diào)用該成員變量時,將調(diào)用的是子類中本身具有的成員變量,而不是從父類繼承的成員變量,繼承
5、原則子類繼承父類的成員變量,包括實(shí)例成員變量和類成員變量。子類繼承父類除構(gòu)造方法以外的成員方法,包括實(shí)例成員方法和類成員方法。子類不能繼承父類的構(gòu)造方法。因?yàn)楦割悩?gòu)造方法創(chuàng)建的是父類對象,子類必須聲明自己的構(gòu)造方法,創(chuàng)建子類自己的對象。子類能夠繼承父類的析構(gòu)方法。子類不能刪除父類成員。子類可以增加自己的成員變量和成員方法。子類可以重定義父類成員。多重繼承的概念美國教授研究出空中汽車沒有翅膀也能飛行。據(jù)了解,MX-400試用2年多來,它最高飛行時速超過了600多公里,比直升機(jī)快2倍,可載4人,飛行最大高度9000米,航程1500公里。遇上風(fēng)雨交加,它也能暢行無阻,夜晚照樣飛
6、行,其飛行本領(lǐng)毫不遜色一般的飛機(jī)。可是飛機(jī)需要機(jī)場、跑道才能起降、飛行,...交通工具有三類:空中交通工具、水上交通工具、陸地交通工具??罩衅噷儆??Java不直接支持多重繼承。4.2.3方法的繼承與覆蓋在類繼承機(jī)制中,方法的繼承和覆蓋是其核心內(nèi)容之一。方法繼承允許子類使用父類的方法,而覆蓋是在子類中重新定義父類中的方法,更顯示了繼承的靈活性。1.方法的繼承從本質(zhì)上講,方法也是一種成員,因此繼承規(guī)則與成員變量的繼承規(guī)則完全一樣,其是否能被繼承同樣取決與訪問限制。2.方法的覆蓋(override)覆蓋(override)是指子類聲明并實(shí)現(xiàn)父類中的同名方法并且參數(shù)列表也完全相
7、同。重寫的主要優(yōu)點(diǎn)是能夠定義各子類的特有行為,4.2.4this與super在Java中,this和super與繼承是密切相關(guān)的。this常用來引用當(dāng)前對象,而super常用來引用父類對象。1.this方法中的某個對象與當(dāng)前對象的某個成員有相同的名字,這時為了不至于混淆,可以使用this關(guān)鍵字來指明要使用某個成員,使用方法是“this.成員名”,即使用this隱式地引用對象的實(shí)例變量和方法。this--本對象2.supersuper用來引用父類的成員,包含父類的構(gòu)造函數(shù)、屬性以及方法。使用方法為super變量名或super.方