原處:http://blog.csdn.net/l271640625/article/details/8393531html
如下Objective-c簡稱OCjava
從事java開發的程序員們都知道,在java中interface是接口的意思,java中類是用class聲明,接口用interface聲明,是兩個獨立的部分,只有在類聲明要實現某個接口時,他們二者才創建了關係,例如:程序員
這時候,AI和AC是獨立存在,AC不會由於沒有和AI創建關係而編譯錯誤,將AC作如下修改後,AI才和AC創建了關係,AC必須實現AI中聲明的方法才能經過編譯。
spa
如今,咱們來看Objective-c,網上你們都將oc中的interface理解爲「非正式協議(或說接口)」,prototal理解爲「正式協議(或說接口)」,我以爲那樣理解起來雖然不困難,可是很變扭,因而我作一點本身的理解:
一、protocal就至關於java中的interface;
二、而interface和implementation共同表明一個類,二者的組合至關於java中的class,即oc中的類必須包括兩部分,interface部分和implementation部分,這纔是oc中的一個類的完整聲明;而後OC中將成員變量和成員方法的聲明部分放置在interface部分中,包括繼承關係,protocal實現關係,都在interface裏面的頭部進行聲明,而後將實現部分放置在implementation部分中,至關因而將類拆分紅聲明和實現兩部分,這兩部分缺一不可,因此在OC中,不妨不要將interface叫作接口,直接叫作類聲明部分來得容易理解多了,簡而言之,oc中interface是類的一個部分,和implementation共同組成一個完整的類。
泛型
OC中的類型id,它能夠認爲是一種特殊的指針:能夠指向任何類型的對象。id 再加上protocal(即oc中的接口),可以達到相似java中泛型的效果
.net
注意這裏的 -(void) test:(id<A>) obj; 這代表test方法接受一個任意類型的對象作爲參數,可是該參數對象必須實現接口A,相似於java中的
void test(List<A> obj) 。指針