重寫父類方法的兩種實現方式

2021-06-19 22:09:51 字數 1059 閱讀 8071

如果想重寫乙個類的方法,既可以通過繼承該類(在這裡就不多少了),還可以通過類別(類的擴充套件catologe) 方法;比如重寫uialertview 的 layoutsubviews

這樣類擴充套件是可以的:

但是,這樣會導致在同乙個類裡面用到的所有uialertview 都會重寫這樣的方法

,導

@inte***ce uialertview (helper) 

- (void)layoutsubviews;

@end @implementation uialertview(helper)

//layout 執行的順序在 drawrect 之前

//在ios 7 後,drawrect 和 layoutsubviews 不會自動執行,除非涉及到setframe addview 等

//在ios 5 中,此方法會被重複呼叫4次

- (void)layoutsubviews

cgrect frame = self.frame;

frame.size.height = frame.size.height + 50;

frame.origin.y = frame.origin.y - 25;

self.frame = frame;

if ([uidevice currentdevice].systemversion.floatvalue >= 6.0f)

}}elseelse if (alertbtnindex == 1)else if (alertbtnindex == 2)

alertbtnindex ++;

}else if ([class isequaltostring:@"uithreepartimageview"]) else if ([class isequaltostring:@"uialertsheettextfield"])}}

}@end

致**的維護性是很差的!所以不建議用類別!如果非要用類別,建議用object c 的關聯給uialertview 關聯乙個屬性來判斷是不是應該重寫此方法!

重寫構造方法實現兩種功能

要求使每個新建立出來的物件都有乙個自定義的預設值 實現 instancetype initwith int age 思考 實現 建立乙個學生類student,通過重寫構造方法實現建立學生物件的時候,預設的年齡的值為指定的年齡 student.h import inte ce student nsob...

python子類重用父類的兩種方式

在子類派生的新方法中重用父類功能的兩種方法 方式一 與繼承無關 指名道姓法,直接用類名.函式名的方法 注意只能當普通函式用,需要把所有的值傳入 classoldboypeople school oldboy def init self,name,age,self.name name self.age...

繼承父類的兩種情況

在as3中如果繼承的子類中 1.沒有加入建構函式,子類將會呼叫父類的建構函式 2.子類中有建構函式,但是沒有呼叫super 同樣子類會呼叫父類的建構函式 看下面的例子1 package private function inita void package private function init...