OC基础05

OC基础05

继承和多态

1,NSObject类

对象和类中的isa指针,都是由NSObject其中的isa属性继承而来的

2,super关键字
  1. 子类不能定义与父同名的成员.
  2. super用于子类访问方法,但这个方法是父类所有,self也可以调用,但是一般建议用super调用.
  3. super只能调用方法不能访问属性.
3,属性的访问修饰符
  1. protected受保护的,子类和父类能访问(默认属性)
  2. private私有的当前类中访问.
  3. public公有的
  4. package只能用于当前target中访问.
    • * 无论如何都不在使用@public*
4,真私有属性

定义在@implementation内只有当前文件能访问,且外界无法看见其属性.只能通过set,get方法访问.

5,私有方法

不写方法的声明,只写方法的实现.只能在当前文件中调用
* 例子:婚恋中的对象属性
姓名知道,年龄外界不知道
婚恋状态外界不知道
磨皮外界不知道
打招呼方法外界知道

6,里氏替换原则(LSP)
  • 子类对象可以替换父类的对象的位置,功能不受影响
ZLPerson *p2 = [ZLStudent new];

表现形式:父类指针指向子类对象地址(学生本来就是一个人类,合情合理)

LSP的好处:
1. 一个指针,一个指针数组不仅可以存本类对象地址还可以以存子类对象地址
2. 如果一个指针是NSObject类型的,可存所有类的的对象.
3. 方法的参数是一个父类对象,参数可为父类或子类对象
LSP的局限性
只能通过父类指针访问子类对象中父类设定的属性,无法访问特有属性(原因未知)

7,多态

**1. 什么是多态?
同一种行为对于不同事物而言,具有不同的表现形式,这种现象就叫做多态.**

  • 继承,子类重写父类方法,父类指针指向子类对象
  • 好处:低耦合
    方法的重写:
    1,都有这个方法,但是子类的实现不同,或者子类认为父类的方法不够完善.
  • 特别注意:当一个父类指针指向子类对象,如果通过这个父类指针调动的方法被子类重写了,那么调用的就是子类的方法.(原因未知)
  • 继承体系中方法的调用顺序:先自己,后父类,最后OBJect,没有则报错
8,description

NSObject类中的方法(任何对象都可以调用),在%@时会被调用这个方法,输出的格式是@”<类名:类地址>”
注意:NSString类重写description方法,所以能输出字符串.

9,类在代码中怎么储存的

因为任何储存在内存中的地址都是有数据类型的,那么类以什么类型储存?

答案:类的本质其实是一个对象(Class类型的class对象)

第一种,类方法访问
        Class c1 = [ZLPerson class];
        c1内部已定义了指针类型
第二种,对象方法访问
        ZLPerson *p1 = [ZLPerson new];
        Class c2 = [p1 class];

其中class对象等价与ZLPerson类
* 类对象只能创建一次,只能在等号右边(不是一个数据类型,无法作为指针类型)

10,SEL数据

SEL是用于存储方法.是一个类,类中的方法其实实际是指向SEL对象的地址.,调用方法就发送一次SEL消息

       调用方法的两种形式:
             [Person run];

       手动发送SEL消息:
           [p1 performSelector:@selector(方法名:)];
           记得参数也是方法的一部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值