接口interface是一個(gè)規(guī)定,給人繼承用的東西,有點(diǎn)像抽象類。
成都創(chuàng)新互聯(lián)公司主營金牛網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),金牛h5微信小程序開發(fā)搭建,金牛網(wǎng)站營銷推廣歡迎金牛等地區(qū)企業(yè)咨詢
接口定義了實(shí)現(xiàn)某種服務(wù)的一般規(guī)范,聲明了所需的函數(shù)和常量,但不指定如何實(shí)現(xiàn)。之所以不給出實(shí)現(xiàn)的細(xì)節(jié),是因?yàn)椴煌膶?shí)體可能需要用不同的方式來實(shí)現(xiàn)公共的方法定義。關(guān)鍵是要建立必須實(shí)現(xiàn)的一組一般原則,只有滿足了這些原則才能說實(shí)現(xiàn)了這個(gè)接口。
擴(kuò)展資料
PHP接口(interface)的特點(diǎn) :
1、接口的方法必須是公開的。
2、接口的方法默認(rèn)是抽象的,所以不在方法名前面加abstract。
3、接口可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。
4、類可以實(shí)現(xiàn)多個(gè)接口(相當(dāng)于把多個(gè)功能集于一身,如手機(jī)實(shí)現(xiàn)了小靈通、MP3、MP4的功能)
5、接口也可以繼承接口。
PHP同大多數(shù)的面向?qū)ο笳Z言一樣,并不支持多重繼承。如果需要實(shí)現(xiàn)多重繼承功能,在PHP中,可以通過接口,它是PHP解決多重繼承問題的方法,在php5.4版本之后有個(gè)類的新特性trait,有興趣的可以百度下。
區(qū)別:
1、對(duì)接口的使用是通過關(guān)鍵字implements。對(duì)抽象類的使用是通過關(guān)鍵字extends。當(dāng)然接口也可以通過關(guān)鍵字extends繼承。
2、接口中不可以聲明成員變量(包括類靜態(tài)變量),但是可以聲明類常量。抽象類中可以聲明各種類型成員變量,實(shí)現(xiàn)數(shù)據(jù)的封裝。(另JAVA接口中的成員變量都要聲明為public static final類型)
3、接口沒有構(gòu)造函數(shù),抽象類可以有構(gòu)造函數(shù)。
4、接口中的方法默認(rèn)都是public類型的,而抽象類中的方法可以使用private,protected,public來修飾。
5、一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承于一個(gè)抽象類。
抽象類還是接口。
如果要?jiǎng)?chuàng)建一個(gè)模型,這個(gè)模型將由一些緊密相關(guān)的對(duì)象采用,就可以使用抽象類。如果要?jiǎng)?chuàng)建將由一些不相關(guān)對(duì)象采用的功能,就使用接口。
如果必須從多個(gè)來源繼承行為,就使用接口。
如果知道所有類都會(huì)共享一個(gè)公共的行為實(shí)現(xiàn),就使用抽象類,并在其中實(shí)現(xiàn)該行為。
以我目前的能力沒法理解這個(gè)問題。但我舉個(gè)例子,可能并不是你想要的答案,但沒準(zhǔn)可以提醒一下。我們用GOOGLE MAP API (開源)的時(shí)候,會(huì)引用一個(gè)類似接口的方法,方法有很多參數(shù)可以設(shè)置。比如這是個(gè)引用地圖的方法,它的里面寫了很多完整的方法,我這里就不放出來了,但是我舉得例子是參數(shù)傳遞在最上面的initialize () (這里我們暫時(shí)當(dāng)作接口)方法上,我們可以傳遞interface_zoom即縮放大小,interface_lati,interface_lngi就是經(jīng)緯度等等參數(shù),這些參數(shù)可以由我們自己處理,無論是從database還是什么其他方法讀取還是怎么運(yùn)算,然后call這個(gè)initialize方法帶指定參數(shù)就可以了,具體里面如何操作的地圖,如何生成的地圖,我們就不管了。接口就是我們看到日常生活中的插座,它規(guī)定好了規(guī)格,是幾項(xiàng)的插頭,我們就做成幾項(xiàng)的插頭,具體里面什么線路我們不管。方法中規(guī)定了什么類型的參數(shù),我們就傳什么類型的參數(shù),具體里面有什么算法我們不管。個(gè)人最自白的解釋,與官方有出入。
var map;
var infoWindow;
function initialize(interface_zoom,interface_lati,interface_lngi) {
var mapDiv = document.getElementById('map-canvas');
map = new google.maps.Map(mapDiv, {
center: new google.maps.LatLng(interface_lati, interface_lngi),
zoom: interface_zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
......
......
}