在我們生活中,有很多的繼承關係,其實繼承我們可以理解為它是什麼什麼的一種。比如:汽車是交通工具的一類,也就是汽車類繼承於交通工具類。
繼承的上層:父類:superclass;
繼承的下層:子類:subclass;
是單向的,不能相互繼承,具有傳遞性:a繼承於b,b繼承於c,a具有b和c的特徵和行為。 a是子類, b是父類
例:父類 person
#impor
@inte***ce person : nsobject
@end
例:子類 student
# import
@inte***ce student : person
oc中 只允許單繼承; 沒有父類的類稱為根類;oc中的根類是nsobject;
繼承的內容:所有的成員變數和方法;也可以重寫父類的方法:
super 的用法:
super 是編譯器指令,在方法實現的內部使用;
作用:給super 傳送訊息,可以執行從父類繼承下來的方法。
繼承中的初始化方法:
self = [super init];
初始化過程: 1.執行父類中實現的初始化方法。
2.從根類nsobject開始執行初始化方法。
3.判斷父類中的初始化是否成功,就是判斷self是否存在。
4.若存在初始化子類成員變數
5.完成物件的初始化設定,返回物件。
例:建立乙個person類,在建立student類繼承於person,建立universitystudent類繼承於student;
person.h
#import
@inte***ce person : nsobject
/// 指定(指派)初始化
- (id)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age;
/// 其他自定義初始化方法
- (id)initwith***:(nsstring *)***;
- (id)initwithname:(nsstring *)name age:(nsinteger)age;
- (id)initwithname:(nsstring *)name ***:(nsstring *)***;
- (void)sayhi;
@end
person.m
#import "person.h"
@implementation person
/// 自定義初始化
- (id)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age
nslog(@"%@", self);
nslog(@"person類初始化結束");
return self;
}/// 其他自定義初始化方法,需要呼叫上面的指派初始化方法
- (id)initwith***:(nsstring *)***
- (id)initwithname:(nsstring *)name age:(nsinteger)age
- (id)initwithname:(nsstring *)name ***:(nsstring *)***
- (void)sayhi
@end
student.h
#import "person.h"
@inte***ce student : person
/// 自定義初始化方法
- (id)initwithname:(nsstring *)name
***:(nsstring *)***
age:(nsinteger)age
school:(nsstring *)school
number:(nsinteger)number;
/// 自我介紹方法
- (void)introduce;
@end
student.m
#import "student.h"
@implementation student
/// 自定義初始化方法
- (id)initwithname:(nsstring *)name
***:(nsstring *)***
age:(nsinteger)age
school:(nsstring *)school
number:(nsinteger)number
nslog(@"student類初始化結束");
return self;
}/// 自我介紹方法
- (void)introduce
/// 子類重寫父類得方法(無需宣告)
- (void)sayhi
@end
universitystudent.h
#import "student.h"
@inte***ce universitystudent : student
/// 完整初始化方法
- (id)initwithname:(nsstring *)name
***:(nsstring *)***
age:(nsinteger)age
school:(nsstring *)school
number:(nsinteger)number
major:(nsstring *)major;
@end
universitystudent.m
#import "universitystudent.h"
@implementation universitystudent
/// 完整初始化方法
- (id)initwithname:(nsstring *)name
***:(nsstring *)***
age:(nsinteger)age
school:(nsstring *)school
number:(nsinteger)number
major:(nsstring *)major
// 返回自身物件
nslog(@"universitystudent類初始化結束");
return self;
}/// 重寫父類方法
- (void)introduce
@end
main.m
#import
#import "student.h" // 只需匯入子類
#import "teacher.h"
#import "universitystudent.h"
int main(int argc, const char * argv)
return 0;
}我們在寫類時,都需要完整的初始化方法。12點太晚類,明天來寫。。
OC之繼承 初始化方法
一 繼承 繼承的上層 父類,繼承的下層 子類。繼承是單向的,不能相互繼承。繼承具有傳遞性 a繼承於b,b繼承於c,a具有b和c的特徵和行為。子類能繼承父類全部的特徵和行為。因為沒有,所以所有。物件導向提供了繼承語法,能大大簡化 把公共的方法和例項變數 寫在父類裡,子類只需要寫自己獨有的例項變數和方法...
OC3 繼承和初始化方法
繼承和初始化方法 乙個完整的初始化方法 每乙個類只在乎自己的初始化方法就可以了 如果乙個初始化方法在被別的初始化方法呼叫 來初始化一系列的成員變數 就把這個方法叫做指派初始化方法 指派初始化方法的作用 1簡化 2確保在使用其他的初始化方法的時候指派初始化方法中得 一定被呼叫 實現遍歷構造器方法 把初...
OC 繼承,便利構造器,初始化方法
zombie.h 自定義初始化方法的宣告 id initwithblood nsinteger blood attack nsinteger attack speed cgfloat speed 便利構造器 zombie zombiewithblood nsinteger blood attack ...