? 1. 面向?qū)ο笕筇卣骶褪牵悍庋b稳析,繼承洗做,多態(tài),其中多態(tài)是OOP中最核心的一個特征彰居。
? 2. 為什么要用多態(tài)呢诚纸,舉個例子,父類中分別有dog和cat喂食的方法陈惰,在兩個子類Dog和Cat之后畦徘,當(dāng)你再想要喂養(yǎng)只鸚鵡的時候,除了定義一個鸚鵡類抬闯,還要在父類中添加一個喂鸚鵡的方法井辆,如此是不是很麻煩,多態(tài)就是解決這個問題的溶握!
? 3. 什么是多態(tài):同一引用類型杯缺,引用不同的對象調(diào)用方法時可以執(zhí)行不同的操作,即父類引用子類對象?
4. 接口的必要性睡榆,例如當(dāng)有很多類都要實(shí)現(xiàn)相同的收費(fèi)方法體萍肆,這個時候就可以創(chuàng)建這個收費(fèi)方法接口袍榆,使各個類產(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í)例馏艾,執(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)型:將父類對象強(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)一個方法被定義為abstract時琅摩,對原本的代碼會造成以下影響:? ?
? ? ? ? ? ? ? ? ? 此方法必須去掉實(shí)現(xiàn)過程,從而只表達(dá)一種抽象的方法外形锭硼。? ? ?
? ? ? ? ? ? ? ? ? 類也必須變成abstract的(這時我們將之稱為抽象類)房资。? ? ?
? ? ? ? ? ? ? ? 一個類變抽象以后,不能被實(shí)例化檀头,也就是說即使有構(gòu)造方法轰异,也不能被new調(diào)用,這時的構(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):單繼承廊镜;一個類可以實(shí)現(xiàn)多個接口? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class 類名稱? implement? 接口1, 接口2......{ }
? ? ? ? 接口的含義
? ? ? ? ? ? ? ? 1.接口代表是一種規(guī)則
? ? ? ? ? ? ? ? 2.接口代表是一種能力? ? ? ? ? ? ? ?
? ? ? 接口實(shí)現(xiàn)的多態(tài)
? ? ? 抽象類與接口的比較
? ? ? ? ? ? ? 1.抽象類和接口都不能實(shí)例化對象
? ? ? ? ? ? ? 3.抽象類中有構(gòu)造方法牙肝,接口沒有
? ? ? ? ? ? ? 2.抽象類中可以聲明變量屬性和普通方法,而接口不能
? ? ? ? ? ? ? 4.抽象類中可以有私有化成員嗤朴,單接口不能? ? ? ? ? ? ? 5.子類繼承抽象是只能是單繼承配椭,而接口可以同時實(shí)現(xiàn)多個? ? ?
? ? ? 面向接口編程的優(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í)
現(xiàn)? ? ? ? ? ? ? ? ? ? ? ? ? ? 了 該? 接口的類都要變化,這就是所謂的設(shè)計(jì)比實(shí)現(xiàn)難歧杏。
以上是我自己的一些總結(jié)镰惦,在編寫時格式有點(diǎn)錯誤,不過不影響得滤。繼續(xù)努力!