繼承(is-a關(guān)系)
語(yǔ)法
@interface GoodPerson: Person //冒號(hào)代表繼承
一個(gè)類繼承另一個(gè)類的屬性和方法
子類可以繼承父類的屬性和方法(非私有的)
子類實(shí)現(xiàn)文件中是不需要導(dǎo)入父類的頭文件的稳强,因?yàn)榭梢哉J(rèn)為,子類頭文件中已經(jīng)包含了父類的頭文件了。
注意:OC不支持多繼承 可用協(xié)議替代-
重寫機(jī)制
一種是完全覆蓋父類的方法
一種是對(duì)父類方法做進(jìn)一步的補(bǔ)充(提倡)
子類.m實(shí)現(xiàn)文件中:-(void)message{ [super message]; //用super來(lái)調(diào)用父類的方法 NSLog(@"子類補(bǔ)充的內(nèi)容"): }
繼承的作用
統(tǒng)一接口
父類指針可以表示子類的對(duì)象
復(fù)合(has-a關(guān)系)
@interface Car: NSObject
@property(strong,nonatomic)Tire *tire;
嚴(yán)格來(lái)講,只有對(duì)象間的組合才能叫復(fù)合啸驯,而基本類型都被認(rèn)為是對(duì)象的一部分谱醇。
多文件組織方式
.h頭文件中導(dǎo)入其他類: @class和#import的區(qū)別
- 使用的區(qū)別
- 如果只是復(fù)用中用到,@class 導(dǎo)入比#import更高效久妆,在需要的地方脉让,@class 僅僅是告訴編譯器桂敛,xxx是一個(gè)類,需要一個(gè)指針指向該對(duì)象即可溅潜。另术唬,循環(huán)引用聲明文件中只能用@class
- 如果是繼承自該類,還是需要#import滚澜。因?yàn)榫幾g器需要先知道所有關(guān)于父類的信息才能成功地為其子類編譯@interface部分粗仓。
- .m實(shí)現(xiàn)文件中,如果需要引用到被引用類的實(shí)體變量或者方法時(shí)设捐,需要#import引入被引用類借浊。
- 性能的區(qū)別
如果有上百個(gè)頭文件都#import了同一個(gè)文件,或者這些文件依次被#import萝招,那么一旦最開始的頭文件稍有改動(dòng)蚂斤,后面引用到這個(gè)文件的所有類都需要重新再編譯一遍,這樣的效率較低槐沼。相對(duì)而言曙蒸,使用@class就不會(huì)出現(xiàn)這種問題了捌治。