類方法繼承使用小思

2021-06-20 10:56:15 字數 1605 閱讀 7989

之前對類方法的繼承一直很朦朧,今日看著書突然想通了,寫了個例子證實了下想法

下面是兩個類,乙個是父類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...