封装
定义:将类的属性和方法隐藏起来,将其私有化,通过一个公共的方法来间接的访问 ,就叫封装作用:过滤数据,保证数据的正确性,增强了代码的健壮性
操作方式 只读(只有get方法) 可读可写(有get,set方法) 只写(只有set方法)
组合:
定义:当一个对象作为另一个对象的成员变量的时候,他们的关系就叫组合模式
用处:当一个对象在另一个类的很多个方法当中都在使用的时候。
作用:因为成员变量对于整个类都是全局的,除了在类方法当中不能使用,都可以使用,所以组合模式可以节省代码,优化程序
场景:两个对象的关系可以用谁拥有谁来表述,那后面的就作为前面的成员变量
缺点:依赖性太高
使用的方式:谁属于谁,前面的就是后面的成员变量,两个类就是组合关系
快速生成代码
设置代码快速生成的方法:
通过设置代码块 修改的方式 :< # 统称 # >
继承
定义:当A类继承了B类,A类就拥有了B类的所有属性和方法, NSObject类是所有类的父类(基类、超类),自己没有父类
好处:节省了代码
一个子类只能有一个直接的父类,其他的都是间接继承
一个父类可以有很多个直接的子类
继承使两个类发声了关系(继承关系),实现多态的前提是两个类有继承关系
增加了代码的重用性
增加了安全性
坏处:依赖性太强(耦合性)
注意:子类可以重写父类的方法,子类不能重写父类的成员变量
场景:如果两个类之间可以用A类是B类来描述,两个类之间就可以用继承
苹果手机是手机,所以Iphone类与Phone之间可以用继承来表示
与组合的比较:如果说A类属于B类来描述,两个类就可以用组合模式来表述。
执行顺序:先到自己的方法列表中找方法,有就停止查找,没有,就到自己的父类继续查找,没有再到爷爷类,依次,一直到NSObject类,停止。如果还没有,就没有找到
super关键字:
代表父类的对象或类名
作用:在子类当中调用父类的方法
注意
如果在子类当中有与父类当中同名的方法,会先调用子类的方法
把子类当中与父类重名的方法,叫做对父类方法的重写
在子类当中与父类当中同名的方法中有自己的特有功能的时候,为了实现我自己的功能 ,就必须重写父类的方法。
super 代表的时当前类的父类的类名或对象,在子类当中调用父类的方法
description
打印的时候有%@,程序就会自动调用description方法
作用:当一个对象有很多个属性,需要将他们进行打印的时候,就可以重写description方法
当你的类里面有很多的属性,你需要将所有的属性全部打印出来的时候,就重写父类的description方法
多态:一种事物的多种形态
多态:一种事物的多种形态
表现:父类的指针指向了子类的对象
好处:增加了代码的扩展性,节省了代码
前提:两个类必须有及继承关系。
多态实现的特点:在运行阶段才动态识别对象的类型(动态绑定)
局限:想让父类的对象调用子类的私有方法,将父类对象的类型进行强制转化
狗 = 动物 = 生物 人 = 高级动物 = 动物 猪 = 动物= 生物
// Dog *dog1 = [Dog new];
// [dog1 eat];
//
// Cat *cat1 = [Cat new];
// [cat1 eat];
整个程序的执行分成三部分:1.预处理:(宏) 2.编译 3.运行
Animal *animal1 = [Dog new];
在程序执行到运行阶段,才真正的识别执行方法的对象类型。(动态绑定)
[animal1 eat];
Animal *animal4 = [Dog new];
这是xcode的升级后的特点,所以当Animal类里面没有eat方法的时候,不能这样调用
[animal4 eat];
如果想让父类的对象调用子类的私有方法,要将父类对象的类型强制转化为子类的类型
Dog *dog3 = (Dog *)animal4;
[dog3 eat];