oc 继承、初始化⽅法、便利构造器

一、继承

继承的特点

OC中只允许单向单继承。

NSObject:OC中的根类,没有⽗类的类称为根类

继承的内容:⼦类能继承⽗类全部的特征和⾏为, 但父类中private修饰的变量、未在.h中声明的方法不可访问。

注意:当子类继承父类时,子类可以不重新声明方法。当 子类调用从父类继承的方法时,不是在调用父类的方法,而是调用自己的,只是父类提供了实现方式

继承中⽅法的执⾏

给CollegeStudent对象发送消息: study

1、查找本类中是否实现(重写)study⽅法。

2、如果没有,查找⽗类中study是否实现。

3、逐级向上查找,找到即执⾏。

4、如果NSObject也没实现,会抛出异常,引起Crash

[super 方法名]  

super是编译器指令,并⾮对象。

作⽤:通知编译器去父类中查找某个方法的实现,子类使用查找到的实现代码。

[self 方法名]

作用:在类的内部调用自己的方法

在实例方法中,self表示调用这个方法的对象,self只能调用实例方法,不能调用类方法

在类方法中, self表示调用这个方法的类,只能调用类方法,不能调用实例方法

没有私有方法

只实现不声明(OC中没有私有方法的概念,可以实现类似的功能):不提供给类的外部及子类使用


二、初始化方法

完整初始化方法

- (id)init {

    self = [super init];

    // 如果初始化失败,返回nil,不再对自身声明的实例变量进行初始化设置

    if (self) {
       
    }
   
    return self;

}

初始化过程

1. ⾃⼰的初始化⽅法中,优先调⽤⽗类的初始化⽅法
2. ⽗类的初始化⽅法中再调⽤⽗类的初始化⽅法,依次往上调⽤
3. 处于最上层的初始化完成之后,回到第⼆层的初始化⽅法中,
完成第⼆层的初始化。
4. 第⼆层的初始化完成之后,回到第三层的初始化⽅法中,依次

执⾏初始化⽅法,直到本类的初始化⽅法完成。



三、便利构造器

声明及实现

+ (id)studentWithName:(NSString *)name school:(NSString *)school;

+ (id)studentWithName:(NSString *)name school:(NSString *)school

{

    return [[Student alloc] initWithName:name school:school];

}

特点

封装了alloc和初始化⽅法。使⽤起来更加简洁。



简答题:

 

1、OC中能不能多继承?子类继承得到了哪些内容?OC中的根类是什么?

2、自定义一个Person类的便利构造器方法。

3、super有什么作用?

4、类方法中的self和实例方法中的self分别表示什么?

你可能感兴趣的:(oc)