zoukankan      html  css  js  c++  java
  • iOS学习笔记---oc语言第三天

    继承、初始化方法

    一、继承

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

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

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

    子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问)

     面向对象提供了继承语法。能大大简化代码,把公共的方法和实例对象写在父类里。子类只需要写自己独有的实例变量和方法即可

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

    继承特点

    oc中只允许单继承

    没有父类的类称为根类,oc中得根类是NSObject(祖宗)

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

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

    继承树

    继承中方法的执行

     super 关键字

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

    作用:给super发消息,可以执⾏⽗类中实现的⽅方法。

    ⼦类可以重写⽗类的⽅法,即:⼦类既有自己的实现,⼜有父 类继承下来的实现,如果想使⽤用父类的实现,向super发送消息

    //重写sayHi方法
    - (void)sayHi
    {
        [super sayHi];//调用父类sayHi方法
        NSLog(@"ok");
    }
    - (void)study//学习
    {
        [super sayHi];//调用父类sayHi方法
        [self sayHi];//调用自身sayHi方法
        NSLog(@"%@ 我正在努力学习",_name);
    }

     二、初始化方法

    创建对象分两步:开辟空间、初始化。

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

    初始化⽅方法在对象的整个⽣生命周期⾥里只使⽤用⼀一次。

    - (instancetype)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;
    //instancetype取代id
    - (id)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;

      //初始化的时候,优先调用父类的初始化方法,初始化父类中的变量,然后在初始化自己的变量。

        //每个类都清楚自己独有的变量,因此。初始化方法里仅仅初始化自己独有的变量,通过调用父类的初始化方法,初始化继承过来的变量

        ///经过一番调用之后,继承树上的所有变量都可以得到初始化

        //最不科学的初始化方法:在子类里面,为每一个变量赋值,因为,你需要自己查阅都继承了哪些变量。

    ⼦类定义了除⽗类中公共实例变量之外的实例变量。在自身的初始 化方法中,优先向super发送init消息,初始化公共变量,初始化成 功之后,再初始化⾃身特有变量,从⽽完成全部实例变量的初始化。

    初始化过程

    1. 执⾏行⽗父类中实现的初始化⽅方法。(向上递归到NSObject类中的初始化⽅方法)

    2. 从根类NSObject开始执⾏行初始化⽅方法。

    3. 判断⽗父类中的初始化是否成功,即self是否存在。

    4. 完成对象的初始化设置,返回对象。

    5. 初始化⼦子类实例变量。

     初始化方法特征

    初始化⽅方法是 “-”⽅方法

    id或者instancetype类型的返回值

    以init开头

    可以带0到多个参数 内部实现:先执⾏行super的初始化⽅方法,再初始化⾃自⾝身变量,return self。

    三、便利构造器

    便利构造器在初始化方法的基础上前进了⼀小步。

    封装了对象创建过程。

    便利构造器是“+”⽅法,返回本类型的实例,⽅法名以类名开头。

    可以有0到多个参数。 内部实现:封装了alloc和初始化⽅法。使⽤用起来更加简洁

    实现函数中代码
    + (Student *)studentWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age number:(NSInteger)number { return [[Student alloc] initWithName:name sex:sex hobby:hobby age:age number:number]; }
    主函数内代码 Student
    *student1 = [Student studentWithName:@"wangw" sex:@"man" hobby:@"xuexi" age:18 number:12];

     

  • 相关阅读:
    Android开发教程
    Java基础——多线程
    Android基础总结(10)——手机多媒体的运用:通知、短信、相机、视频播放
    Android基础总结(9)——网络技术
    Android基础总结(7)——异步消息处理
    Android基础总结(6)——内容提供器
    《App研发录》知识点汇总
    Android基础总结(5)——数据存储,持久化技术
    Android基础总结(4)——广播接收器
    Android基础总结(3)——UI界面布局
  • 原文地址:https://www.cnblogs.com/limicheng/p/3807502.html
Copyright © 2011-2022 走看看