Objective-C 继承与类

创建: 2018/01/20

完成: 2018/01/21

更新: 2018/01/22 标题前增加 [Objective-C]

 

 

 继承的概念
 父类与子类

 ●继承: 继承其他类

 ●父类: 被继承的类 子类: 继承的类

 ●子类: 可以增加方法与变量,改写已有父类方法

 继承关系

(Class hierarchy)

 不断继承,树结构一样

 最顶端是根类

 Cocoa环境下的根类是NSObject, 所有类都要继承它!(直接或间接)

   
   
   
   
   
   
   
   
 使用继承的类定义
 继承关系的声明

 

 

位置

 头文件 {接口所在处(@interface)}

 
@interface 类名 : 父类 {
    实例参数的声明
    ...
}
方法的声明;
...
@end

 

有要继承的就把那个写上

没有要继承的就写根类NSObject

变量声明

 不需要加的可以只写{} 或者省略

方法声明

 重载的也尽量声明一下并加上注释说明是重载

   

  

 

 类声明与头文件   继承时,头文件必须包含被继承类的头文件
 继承与方法的呼出 

 当呼出函数(发送信息)时

 ●先找当前类定义里有没有

 ●再找父类里面有没有定义,没有就再往上找

 呼出重载前的父类的方法  
[super 方法名];

 

 构造函数

  

 alloc的作用

 

   为类的实例申请内存
   把所有值设为0
   

 

 原则

 ●先把父类的init呼出

 ●判断父类init是否成功

 例  
- (id)init {
    self = [super init];
    if (self != nil) {
        ...
    }
    return self;
}

 

 

 

 

   

 

   
   
   
   
   
 继承的例子
   # TODO: Supply [补充例子, 46~49]
   
 继承与呼出方法
 self   自己
 super

 继承的父类(最靠近的一个)

 用super来呼出方法是呼出父类的方法

   # TODO: Supply [补充例子, 51~52]
   
   
   
   
   
   
   
 定义方法时的注意 
 内部方法

 ●不在@interface里声明,直接在@implementation里定义

 ●外部看不懂相关信息,但是仍旧可以呼出该函数

 ●被继承时候主要不要不小心重载了(建议在开头附上前缀)

@interface Sample : NSObject {
    int a;
}
- (int)test: num;
@end


@implementation Sample
- (int)test: num {
    ...
}
- (int)test_2: num {
    ...
}
@end

 

 

 指定初始化函数

 (Designated initializer)

 ●可以单独(包含读取父类的指定初始化函数)完成初始化,不需要呼出本类内其他构造函数的函数

 ●NSObject的指定初始化函数式init

 ●子类创设初始化函数时, 要呼出父类的指定构造函数(也就是主构造函数)

   
   
   
   
   
   
   
   
posted @ 2018-01-20 00:32  懒虫哥哥  阅读(119)  评论(0编辑  收藏  举报