iOSDay11之继承

Posted 墨隐于非

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOSDay11之继承相关的知识,希望对你有一定的参考价值。

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

1、继承

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

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

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

 1> 继承的特点:

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

  继承的内容:所有实例变量和方法

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

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

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

 2> super

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

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

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

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

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

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

 3> 消息发送机制

技术分享

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:@""];                       

 

以上是关于iOSDay11之继承的主要内容,如果未能解决你的问题,请参考以下文章

iOSDay13之NSString

iOSDay16之集合遍历和数组排序

iOSDay08之C语言内存管理

11. Java基础之继承

C++11之继承构造函数(using 声明)

C++的探索路11继承与派生之拓展篇--多形式派生以及派生类指针转换