面向对象的三大特性:封装,继承,多态。

1、继承

继承既能保证类的完整,又能简化代码。

把公共的⽅法和实例变量写在⽗类⾥,⼦类只需要写⾃⼰独有的实例变量和⽅法即可。

继承是⾯向对象三⼤特性之⼀,合理的继承,能减少很多冗余代码,加快开发速度。

 1> 继承的特点:

父类,继承的下层:子类。

所有实例变量和方法。

单向的,不能相互继承。

传递性:A继承与B,B继承与C,A具有B和C的特征和行为。

子类不满意父类方法的实现,可以重写(overwrite)父类的方法。

 2> super

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

super发消息,可以执⾏⽗类该⽅法的实现

  重写从⽗类继承过来的⽅法的三种情况:

   • 完全以⼦类的实现内容为主,丢弃⽗类实现的内容。  

   • 完全以⽗类的实现内容为主,没有⼦类实现的内容。

   • 既有⽗类对该⽅法的实现,也有⼦类对该⽅法的实现。

 3> 消息发送机制

ios继承xib的控制器 ios 继承_初始化方法

2、初始化方法

 1> 初始化方法

初始化⽅法的主要作⽤是:为某些实例变量赋初值。

⽣命周期⾥只使⽤⼀次。

注:初始化⽅法是在对象的初始化阶段完成其实例变量的赋值操作,⼀个对象的初始化阶段只有⼀次,所以初始化⽅法只使⽤⼀次。

1 - (id)init {
 2   //给super发送init消息:执⾏⽗类中实现的init⽅法
 3   self = [super init];
 4   //判断从⽗类继承过来的init⽅法是否初始化成功
 5   if (self) {
 6   //初始化设置
 7   }
 8   //返回初始化完成的对象
 9   return self;
10 }

  ⼦类定义了除⽗类中公共实例变量之外的实例变量。

⾃⾝的初始化⽅法中,优先向super发送init消息,初始化公共变量, 初始化成功之后,再初始化⾃⾝特有变量,从⽽完成全部实例变量的初始化。

 2> self

  self是系统关键字。 self在⽅法中指代当前⽅法的调⽤者。

  self在实例⽅法中,指代调⽤当前⽅法的对象。

- (void)objectMethod {

  }

  self在类⽅法中,指代当前类。

+ (void)classMethod {

}

 3> 初始化方法特征

  • 初始化⽅法是 "_"⽅法。

id 或者 instancetype 类型的返回值。

init开头。

0 到多个参数。

super的初始化⽅法,再初始化⾃⾝变量,后return self

 4> 初始化过程

  • ⾃⼰的初始化⽅法中,优先调⽤⽗类的初始化⽅法。
  • ⽗类的初始化⽅法中再调⽤⽗类的初始化⽅法,依次往上调⽤。
  • 处于最上层的初始化完成之后,回到第⼆层的初始化⽅法中, 完成第⼆层的初始化。
  • 第⼆层的初始化完成之后,回到第三层的初始化⽅法中,依次执⾏初始化⽅法,直到本类的初始化⽅法完成。

 5> 指定初始化方法

initWith开头,后面跟上参数列表

1 - (id)initWithName:(NSString *)name gender:(NSString *)gender {
2     self = [super init];
3     if (self) {
4         _name = name;
5         _gender = gender;
6     }
7     return self;
8 }

3、便利构造器

 1> 封装了对象创建过程

封装了alloc和初始化操作,创建对象更加⽅便快捷。

 2> 特征

"+"

本类型的实例。

类名+ With + 参数列表。

0 到多个参数。

 3> 便利构造器声明,实现和调用

  声明:

1    + (id)personWithName:(NSString *)name gender:(NSString *)gender;

 

  实现:

1 + (id)personWithName:(NSString *)name gender:(NSString *)gender {
2 
3     return [[Person alloc] initWithName:namegender:gender];
4 
5 }

  调用:

1 Person *per = [Person personWithName:@"Frank" gender:@"男"];