JAVAOOP ?多態(tài)和接口

? 1. 面向?qū)ο笕筇卣骶褪牵悍庋b,繼承,多態(tài),其中多態(tài)是OOP中最核心的一個(gè)特征。
? 2. 為什么要用多態(tài)呢,舉個(gè)例子,父類中分別有dog和cat喂食的方法,在兩個(gè)子類Dog和Cat之后,當(dāng)你再想要喂養(yǎng)只鸚鵡的時(shí)候,除了定義一個(gè)鸚鵡類,還要在父類中添加一個(gè)喂鸚鵡的方法,如此是不是很麻煩,多態(tài)就是解決這個(gè)問題的!
? 3. 什么是多態(tài):同一引用類型,引用不同的對(duì)象調(diào)用方法時(shí)可以執(zhí)行不同的操作,即父類引用子類對(duì)象?
4. 接口的必要性,例如當(dāng)有很多類都要實(shí)現(xiàn)相同的收費(fèi)方法體,這個(gè)時(shí)候就可以創(chuàng)建這個(gè)收費(fèi)方法接口,使各個(gè)類產(chǎn)生各自的收費(fèi)行為?
5. 面向接口編程:軟件系統(tǒng)的整體架構(gòu)由接口構(gòu)成,而不是具體的類,我們可以先設(shè)計(jì)好這些接口,然后編寫具體的實(shí)現(xiàn)類來實(shí)現(xiàn)相應(yīng)的功能。? ? ? ?


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 多態(tài)與接口

? ? 繼承中的多態(tài)
? ? ? ? ? ? ? 概念
? ? ? ? ? ? ? ? ? ? ? 以父類定義參數(shù)或變量的類型,運(yùn)行時(shí)傳遞不同的子類實(shí)例,執(zhí)行不同的操作過程 實(shí)現(xiàn)? ? ? ? ? ? ? ? ? ? ? 1.子類繼承父類,并且重寫父類的方法? ? ? ? ? ? ? ? ? ? ? 2.以父類定義變量類型,調(diào)用是傳遞子類實(shí)例
? ? 向上轉(zhuǎn)型和向下轉(zhuǎn)型(前提符合is-a關(guān)系)? ? ? ? ? ? ? ? Pet p1=new Dog();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p1.eat();? ? ? ? ? ? ?
Pet p2=new Cat();? ? ? ? ? ? ? ? ?
? p2.eat();


? ? ? ? ? 向上轉(zhuǎn)型:將子類實(shí)例賦值給父類變量:將丟失子類特有屬性及方法
? ? ? ? ? 向下轉(zhuǎn)型:將父類對(duì)象強(qiáng)轉(zhuǎn)成子類類型(強(qiáng)制類型轉(zhuǎn)換? 類型兼容)? ? ? ? ? ? Pet p1=new Dog(); //向上轉(zhuǎn)型? ? ? ? ? ? p1.eat(); //調(diào)用子類中的eat方法? ? ? ? ? ? Dog d=(Dog)p1; //向下轉(zhuǎn)型? ? ? ? ? ? d.catchFly(); //可以調(diào)用子類獨(dú)有的方法?


? ? ? 抽象類

? ? ? ? ? 抽象方法所在的類一定是抽象類 抽象類中不一定有抽象方法? ? ? ? ? ? ? ?
? ? ? ? ? 抽象類使用abstract關(guān)鍵字來實(shí)現(xiàn)? ? ? ? ? ? ?
? ? ? ? ? Java中 當(dāng)一個(gè)方法被定義為abstract時(shí),對(duì)原本的代碼會(huì)造成以下影響:? ?
? ? ? ? ? ? ? ? ? 此方法必須去掉實(shí)現(xiàn)過程,從而只表達(dá)一種抽象的方法外形。? ? ?
? ? ? ? ? ? ? ? ? 類也必須變成abstract的(這時(shí)我們將之稱為抽象類)。? ? ?
? ? ? ? ? ? ? ? 一個(gè)類變抽象以后,不能被實(shí)例化,也就是說即使有構(gòu)造方法,也不能被new調(diào)用,這時(shí)的構(gòu)造方法只能被子類通過super來進(jìn)行調(diào)用。


? ? 接口

? ? ? ? ? 使用interface定義接口 實(shí)現(xiàn)類使用implements實(shí)現(xiàn)接? 口? ? ? ? ? ? ? public interface PCI { //PCI接
口? ? ? ? ? ? ? ? ? ? public void work(); //沒有方法體? ? ? ? ? ? ? ? }
? ? ? ? 接口的特點(diǎn)
? ? ? ? ? ? ? 1.接口必須是public
? ? ? ? ? ? ? 2.接口中的所有方法都是public并且abstract,可以省略
? ? ? ? ? ? ? 3.接口中不能定義屬性變量,只能定義常量? ? ? ? ? ? ? 4.接口不能被實(shí)例化
? ? ? ? ? ? ? 接口可以彌補(bǔ)繼承的缺點(diǎn):單繼承;一個(gè)類可以實(shí)現(xiàn)多個(gè)接口? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class 類名稱? implement? 接口1, 接口2......{ }
? ? ? ? 接口的含義
? ? ? ? ? ? ? ? 1.接口代表是一種規(guī)則
? ? ? ? ? ? ? ? 2.接口代表是一種能力? ? ? ? ? ? ? ?
? ? ? 接口實(shí)現(xiàn)的多態(tài)


? ? ? 抽象類與接口的比較

? ? ? ? ? ? ? 1.抽象類和接口都不能實(shí)例化對(duì)象
? ? ? ? ? ? ? 3.抽象類中有構(gòu)造方法,接口沒有
? ? ? ? ? ? ? 2.抽象類中可以聲明變量屬性和普通方法,而接口不能
? ? ? ? ? ? ? 4.抽象類中可以有私有化成員,單接口不能? ? ? ? ? ? ? 5.子類繼承抽象是只能是單繼承,而接口可以同時(shí)實(shí)現(xiàn)多個(gè)? ? ?


? ? ? 面向接口編程的優(yōu)點(diǎn):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? 1.接口和實(shí)現(xiàn)類分離了,適用于團(tuán)隊(duì)的協(xié)作開發(fā)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? 2.增強(qiáng)了程序的可擴(kuò)展性可維護(hù)性。? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? 缺點(diǎn): 設(shè)計(jì)難了,在你沒有寫實(shí)現(xiàn)的時(shí)候,就得想好接口,接口一變,全部實(shí)
現(xiàn)? ? ? ? ? ? ? ? ? ? ? ? ? ? 了 該? 接口的類都要變化,這就是所謂的設(shè)計(jì)比實(shí)現(xiàn)難。


以上是我自己的一些總結(jié),在編寫時(shí)格式有點(diǎn)錯(cuò)誤,不過不影響。繼續(xù)努力!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,267評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,096評(píng)論 0 4
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,144評(píng)論 0 62