多型:指標以父類型別宣告,但實際執行時指向的是其某個子類的物件,當用這個指標呼叫方法時,會根據其指向的不同子類物件呼叫不同的物件方法。這種現象叫多型。
多型的前提是子類會覆蓋父類的方法。
多型的應用:
需要乙個新的函式專門用來餵狗
void feed(dog *d)
如果這個時候也需要喂貓,那就應該重寫新乙個新的函式
void feed(cat *c)
而狗和貓實際上都繼承自動物這個類,在這裡就可以使用多型來簡化**了。
這裡只需要把函式的引數寫成是animal *
型別的,那麼
dog和
cat型別的物件就都可以傳入進來。
呼叫的時候直接改變引數就可以了。
使用多型需要注意的地方:
指標變數在編譯階段只能呼叫其編譯時型別所具有的方法,執行時則執行它執行時型別所具有的方法。
所以父類指標呼叫子類特有方法時編譯報錯。
解決辦法:
1.用泛型:id d=a;
2.強制型別轉換:dog *d=(dog *)a;
OC 特有語法1
asp.net unity開發 net培訓 期待與您交流!一 利用點語法替換set方法和get方法 1.方法呼叫 student stu student new stu setage 10 int age stu age 這是set和get的物件呼叫方法 2 點語法 stu.age 10 int a...
OC特有語法 SEL
sel就是對方法的一種包裝。包裝的sel型別資料它對應相應的方法位址,找到方法位址就可以呼叫方法。在記憶體中每個類的方法都儲存在類物件中,每個方法都有乙個與之對應的sel型別的資料,根據乙個sel資料就可以找到對應的方法位址,進而呼叫方法。inte ce person nsobject void t...
OC特有語法 Block
block 與函式指標的比較 有點像函式指標,可以作為引數傳遞,作為函式返回值 函式指標 void mypoint test 指向函式的指標。儲存函式名代表的指標變數 mypoint block 彌補了指向函式的指標不能夠直接儲存乙個函式體 void myblock 1 定義block變數 int ...