面向对象之接口——
閱讀指南
- 前言
- 接口
- 接口的多態(tài)性
- 抽象類和接口的異同
- 接口的作用
- 面向接口編程
- 結(jié)語
前言
本篇我們介紹接口、接口的多態(tài)性以及接口的作用,然后淺淺提一下接口和抽象類的異同,最后我們介紹面向接口編程的思維。
接口
從程序設(shè)計的角度來說,接口是相關(guān)項目的不同軟件開發(fā)組開發(fā)的軟件之間相互交互的協(xié)議。比如在圖形軟件開發(fā)中,圖像處理公司為圖形軟件開發(fā)公司提供數(shù)字圖像處理方法,為協(xié)調(diào)兩個公司之間的軟件開發(fā)需要制定圖像處理的接口協(xié)議。在圖形軟件開發(fā)項目中,制定好圖像處理的接口后,圖像處理公司和圖形軟件開發(fā)公司可以獨立的并行開發(fā)各自的軟件項目。圖像處理公司可以方便的升級圖像處理包,圖形軟件開發(fā)公司可以使用不同的圖像處理公司提供的圖像處理包。
-
普通類:只有具體實現(xiàn)
-
抽象類:具體實現(xiàn)和規(guī)范(抽象方法)都有!
-
接口:只有規(guī)范,自己不能寫方法。約束和實現(xiàn)分離。
說白了,接口就是規(guī)范,也就是定義了一組規(guī)則,體現(xiàn)了現(xiàn)實世界中“如果你是…,則必須能…”的思想。接口的本質(zhì)是契約,就像我們?nèi)碎g的法律一樣,制定好后大家都遵守。OO的精髓,是對對象的抽象,最能體現(xiàn)這一點的就是接口。 為什么我們討論設(shè)計,模式都只針對具備了抽象能力的語言(比如C++,Java,C#等),就是因為設(shè)計模式所研究的,實際上就是如何合理的去抽象。
聲明類的關(guān)鍵字是class,聲明接口的關(guān)鍵字是interface
接口的多態(tài)性
不同的類實現(xiàn)了相同的接口,不同類實現(xiàn)的接口的行為是不同的。程序設(shè)計中接口的多態(tài)性的實現(xiàn)是通過接口變量來實現(xiàn)的。把實現(xiàn)接口的類的對象賦值給接口變量,接口變量成為了一個上轉(zhuǎn)型對象,然后使用接口變量調(diào)用接口方法。接口指向不同類的對象時,其行為表現(xiàn)是不同的,這就是接口的多態(tài)性。
下面我們看一個例子:
public class Example04 {public static void main(String[] args) {//創(chuàng)建Speaker類的實例speakerSpeaker speaker = new Speaker();//speaker的方法makeSpeak的參數(shù)為接口類型的參數(shù),下面兩個分別是不同的對象(他們都實現(xiàn)了接口Speakable),接口指向不同類的對象時,其行為表現(xiàn)是不同的。這就是接口的多態(tài)性。speaker.makeSpeak(new Dog());speaker.makeSpeak(new Cat());} }class Speaker {public void makeSpeak(Speakable ispeak) { //接口類型參數(shù)ispeak.speak();} } //Dog實現(xiàn)接口 重寫speak方法 class Dog implements Speakable {@Overridepublic void speak(){System.out.println("Wang Wang Wang!");} } //Cat實接口 重寫speak方法 class Cat implements Speakable {@Overridepublic void speak(){System.out.println("Miao Miao Miao!");} }抽象類和接口的異同
抽象類和接口都需要有具體的類去實現(xiàn)。在軟件世界中,抽象類和接口的使用場合是不同的。
從語法角度來說,
jdk1.8可以寫以default和static開頭的具體方法
接口的作用
- 1.本質(zhì)上也就是一種約束
- 2.定義一些方法,讓不同的人實現(xiàn)
- 3.接口里面的方法都是public abstract
- 4.接口里面的常量都是public static final
- 5.接口不能被實例化,接口中是沒有構(gòu)造器的
- 6.可以實現(xiàn)多個接口,即接口可以多繼承,通過implements
- 7.實現(xiàn)了接口的類,必須要重寫接口里面的方法
面向接口編程
在一個軟件項目的開發(fā)過程中,可以分成多個部分,然后共同完成。各個軟件開發(fā)組織之間只需要定義好各個軟件組成部分之間的交互接口,就可以并行獨立的完成各自的開發(fā)任務(wù)。例如自動駕駛項目。如下:
public class Example05 {public static void main(String[] args) {AutoDriver driver = new AutoDriver();driver.drive(new BYD());driver.drive(new GL());} } class AutoDriver {public void drive(OperateCar icar) {//……icar.start();//…….} } interface OperateCar {// constant declarations, if any// method signatures//int turn(…);void start();// more method signatures } class BYD implements OperateCar{// the OperateCar method implementationpublic void start() {System.out.println("start BYD");}// other members, as needed } class GL implements OperateCar{// the OperateCar method implementationpublic void start() {System.out.println("start GL");}// other members, as needed }結(jié)語
真正有光的人,壓的時間越久,深度越深,綻放的光芒才可以越燦爛。
總結(jié)
- 上一篇: 项目5-模板类中使用友元函数
- 下一篇: 详情页面,折线图