zoukankan      html  css  js  c++  java
  • 继承

    【注】面向对象语言的三大特性,继承性,封装性,多态性。

    【注】这里说的继承,指集合的包含关系,即父类和子类的关系

    一.认识继承

    (一)从生活逻辑的角度

    父类  生物      外星人          超级英雄

    子类  动物   变形金刚      变种人

    父类  动物   变形金刚      变种人

    子类  人类   汽车人          欧米伽级变种人

    人类   汽车人          欧米伽级变种人

    对象  我   大黄蜂          凤凰女

    【注】父子类的各种称呼

    父类   parentClass    超类 supperClass   基类

    子类   childClass        子类 subClass         派生类

    【注】【继承】也可被称作【派生】。父类拥有的属性和方法,子类直接获得,这个过程叫做继承。子类在父类基础上,衍生出了自己独有的属性和方法,称为派生。继承和派生是描述同一事物的两种侧重。

    (二)从编写代码的角度

    @interface Father : NSObject

    {

        int a;

        int b;

        int c;

    }

    - (void)run;

    - (void)jump;

    @end

    @interface Son : Father

    //通过:建立继承关系 继承到父类的字段,属性和消息

    //但是子类无法继承到父类未声明的方法

    //子类也可以派生出自己独有的字段,属性和消息

    {

        int d;

    }

    - (void)swim;

    @end

    【重写】有时候从父类继承到的方法,并不适合子类,子类可以重写这个方法。

    【重写是多态的一种,多态就是同一个声明不同的实现】

    【注】很多时候,子类的方法只需要在父类的同名方法中增补些内容。可以通过关键字【supper】调用父类的方法,再增添子类独有的内容。

    //重写父类的jump方法,重写方法,不用声明

    //重写的方法会覆盖掉父类的方法

    - (void)jump

    {

        NSLog(@"I can jump 1.8m!");

    }

    //很多时候,重写父类的方法,只是在父类的功能上添枝加叶。

    - (void)showSelf

    {

        //先调用父类的showSelf,再加上自己的功能

        [super showSelf];

        NSLog(@"%@", self.ID);

    }

    (三)从内存结构的角度

    【自己画图】

    【问】为什么OC不能sizeof一个对象的大小或一个类的大小?和类结构相近的结构体却可以。

    【再问】为什么OC不能将对象声明到静态空间,如栈中?和类结构相近的结构体却可以。

    【答】因为OC的动态继承编译机制。所谓动态继承机制,就是说在编译时,不能确立类之间的继承关系,自然无法确定类的大小。只有运行时,才确立类之间的继承关系。不能在编译时确定类的大小,自然不能将类的对象创建在栈里。

    二.继承的作用

    编写面向对象的程序,核心的手法有三:

    继承 封装 多态

    (一)(iOS中用的最少)创建大量相似的类

    【例】创建象棋中的棋子,车马士象炮。

    可以先创建棋子类,作为父类。

    (二)(最常用)继承一个官方或第三方类,添加属性和方法,创建一个更符合当前工程的新类。

    【注】NSString NSArray NSDictionary 都是【工厂类】不能被继承,即使被继承,也不能使用父类的方法。

    【注】因此经常听到人说,继承用于扩展类。

    (三)(不常用到)用继承方式统一多态接口

    【见下一节】

    三.多态与类的消息机制

    【多态】重写,虚函数

    //其实多态就是指,同一个接口不同的实现。

    【注】OC的成员方法采用消息机制,因此都是虚函数。

    oc函数都是虚函数。

    【虚方法】

    1.父类的指针,可以指向子类的对象。

    2.响应消息,不看指针,看对象。

    【注】虚方法体现了不同事物被同一事件触发,有不同的响应。

    【工厂类】

    //狼  灰太狼

    //羊  喜洋洋

    //动物  灰太狼, 喜羊羊

    :动物

    NSString * str = @“123”;

    NSString * str = [[NSString alloc] initUTF8String:];

    【例】

    殴打小动物

    有三种小动物,猫,狗,蛤蟆

    【分析项目<英汉字典>】

    //数据

    //对象:储存数据,管理数据

    //对象储存管理:英汉词条对

    //每个英汉词条对是一个对象。

    //词条管理器,管理每个词条

    —————

    a:一个

    —————

    abc:某种退

    烧药

    —————

  • 相关阅读:
    设计模式总结——程序猿的武功秘籍(上)
    php获取分类以下的全部子类方法
    TypeError: Cannot read property &#39;style&#39; of null 错误解决
    Java抽象类
    PHP_SELF、 SCRIPT_NAME、 REQUEST_URI差别
    [WPF]使用Pack URI路径訪问二进制资源
    Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
    Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
    Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
    Android JNI编程(二)——C语言的基本数据类型,输出函数,输入函数
  • 原文地址:https://www.cnblogs.com/liudongyan/p/4395182.html
Copyright © 2011-2022 走看看