A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 仰望星空的猪 于 2015-11-27 10:44 编辑

1 多态
       多态:某一类事物的多种形态。
       程序中多态:不同的对象以自己的方式响应相同的方法的能力。每个对象都可以有自己的同名方法。
       多态的条件
              有继承关系,有同名方法的重写。   
               基类 * 对象名=[子类 new];//父类的指针指向子类的对象。
       多态的优点
              简化编程借口。容许类和类之间的同名方法。
       多态的实现
      1) 基类定义方法并实现(-run())
      2) 派生类重写父类的同名方法(-run())
     3) 父类指针指向子类对象
       基类 * 对象名=[子类 new];
4) 父类指针调用子类方法
[对象名 方法];
       多态的原理
              动态类型可以使直到程序运行时才确定对象所属的类型。
              动态类型绑定能使程序执行时才确定对象调用的实际方法。
              注意
存在多态时,父类可以访问子类特有方法。需要强制类型转换。将父类指针类型转换为子类指针类型。
2 类的本质
              类的本质还是类(类对象)。是另外一个类的对象。
              类对象是一种数据结构,存储的是类的基本信息:类大小,类名,类版本以及消息与函数的映射表。
              类对象代表类。
              class代表类对象,类方法属于类对象。
              Person  *p =[Person]
              p 是Person实例对象
              Person 是class类的类对象
类对象获取
   1) 通过实例对象获取
Class  c=[p class];  Person
  2) 通过类名对象
Class c =[ Person class];
              类对象的使用
                     可以创建对象 Person *p= [c  new]; c可以当Person用
                     可以调用类方法
3类对象的存储
   类对象(Person)也在堆区存储。_isa指向代码区。
   实例对象(p)_isa 指向类对象的地址。
   P指向类对象。
SEL
对方法的包装,表示方法的存储位置。
1) 当实例对象调用方法的时候会把这个方法包装成SEL类型的数据
2) 根据SEL找到对应的方法地址。
3) 根据方法地址调用方法。
使用
Person *p=[Person new];  // Person类中有方法 –eat()

SEL  sel =@selectot(eat);
[ p performSelector :sel ];  //响应方法



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马