通過擴(kuò)展或者修改既有類來定義新類的方法叫做繼承(inheritance)。
子類可以:追加新的方法万细;追加新的實例變量扑眉;重寫定義父類中的方法
父類和子類是一種相對稱呼
在集合用語中,子集指的是比較小的集合雅镊,但在類的情況下子類一般是父類的擴(kuò)展襟雷。
OC有唯一根類,所有對象直接或間接繼承了NSObject類中定義的各種屬性
如果子類沒有特別想繼承的類仁烹,就需要指定NSObject為父類耸弄。
重寫方法時,需要在接口中重新聲明卓缰,在聲明中加上注釋方便理解 ? ?/* ?override ?*/
子類必須包含父類接口的頭文件计呈。
super與self不同,并不確定指向某個對象征唬,所以super只能被用于調(diào)用父類的方法捌显,不能通過super完成賦值,也不能把方法的返回值指定為super总寒。
重寫init初始化方法的格式:
- (id)init
{
self = [super init];
if (self != nil) {
...
}
return self;
}
如果想在一個方法中調(diào)用當(dāng)前類中定義的方法扶歪,可以利用self。但如果存在繼承關(guān)系摄闸,通過self調(diào)用方法時要格外小心善镰。
方法定義時的注意事項:
局部方法:
局部方法名最好添加固定前綴。
局部方法名不在接口文件中聲明年枕,在實現(xiàn)文件中直接實現(xiàn)炫欺,位置必須放在其他方法定義之前。
指定初始化方法:
就是能確保所有實例變量都能被初始化的初始化方法熏兄,這種方法是初始化的核心品洛。除此之外還有一些通過封裝來調(diào)用制定初始化方法的方法叫非指定初始化方法。
因為類的非指定初始化方法調(diào)用指定初始化方法完成初始化摩桶。所以子類重寫父類的指定初始化方法桥状,就一定要調(diào)用父類的指定初始化方法,而不能調(diào)用父類的非指定初始化方法硝清,否則會造成遞歸循環(huán)調(diào)用岛宦,無法終止。