之前對類方法的繼承一直很朦朧,今日看著書突然想通了,寫了個例子證實了下想法
下面是兩個類,乙個是父類ccfather, 乙個是子類ccson繼承自ccfather
#import @inte***ce ccfather : nsobject
- (nsstring *)name;
+ (nsstring *)classnameofself;
- (void)dosth;
@end
#import "ccfather.h"
@implementation ccfather
- (nsstring *)name
+ (nsstring *)classnameofself
- (void)dosth
@end
#import "ccfather.h"
@inte***ce ccson : ccfather
@end
#import "ccson.h"
@implementation ccson
- (nsstring *)name
+ (nsstring *)classnameofself
@end
驗證的**在下面,關鍵在於呼叫類方法的時候不要直接使用[xxclassname xxfunction];而跟物件方法一樣,使用[[self class] xxfunction],這樣在實時執行時會根據對應的class去呼叫對應的class方法,就像例子中的 dosth方法一樣
ccfather *f = [[ccfather alloc] init];
ccson *son = [[ccson alloc] init];
nslog(@"father: %@ %@", f.name, [ccfather classnameofself]);
[f dosth];
nslog(@"son: %@ %@", son.name, [ccson classnameofself]);
[son dosth];
輸出結果是如下,最核心的結果是分別呼叫dosth方法,ccson的輸出的classname是ccson,ccfather輸出的classname是ccfather,在子類中正確的呼叫了被子類覆蓋的類方法,而不用在ccson中覆蓋dosth方法,再明確的呼叫[ccson
classnameofself
]
2014-02-12 00:21:39.674 demo[1044:907] father: father ccfather
2014-02-12 00:21:39.675 demo[1044:907] classnameofself: ccfather
2014-02-12 00:21:39.676 demo[1044:907] son: son ccson
2014-02-12 00:21:39.676 demo[1044:907] classnameofself: ccson
繼承類構造方法使用
1,呼叫未繫結的超類構造方法 class bird def init self self.hungry true defeat self ifself.hungry print eee self.hungry false else print no,thanks print eat class so...
ruby類繼承中的方法繼承
c class a class b a 這段程式的輸出結果是ab 結果都不陌生,把這段程式用ruby重寫 ruby class a def initialize puts a endend class b a def initialize puts b endend 這段程式的輸出是b,並非我想像中...
Python 類繼承方法覆蓋
是指有繼承關係的類中 子類中實現了與基類中同名的方法 在子類例項中呼叫該方法時 實際呼叫的是子類中的方法 這種現象稱作覆蓋 也就是實現與父類同名 但是功能不同的方法 可以改變父類方法的功能。定義子類mylist 繼承於list父類 class mylist list pass 例項化 l mylis...