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

1、继承

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

把公共的方法和实例变量写在子类,子类只需要写父类独有的实例变量和方法即可。

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

 1. 继承的特点:

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

所有实例变量和方法。

继承是单向的,不能相互继承。

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

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

 2. super

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

super发消息,可以执??类该?法的实现

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

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

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

   • 既有?类对该?法的实现,也有?类对该?法的实现。

 3.消息发送机制

ios 继承 多态 ios多重继承_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:@"男"];