面向对象的三大特征:封装、继承、多态
一、 封装(成员变量的封装)
set方法和get方法
set方法(能修饰内部变量)
1、 作用:提供一个方法,让外界设置成员变量的值,可以在方法里面对参数进行过滤
2、 命名规范: 1> 方法名必须以set开头
2> set后面跟上成员变量的名称,成员变量首字母必须大写
3> 返回值一定是void类型
4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
5> 形参名称不能跟成员变量名称一致
get方法(只能访问,不能修改)
1、作用:返回对象内部的成员变量
2、命名规范: 1> 肯定有返回值,返回值类型肯定和成员变量一致
2> 方法名与成员变量名一致
3> 不需要接收任何参数
成员变量
成员变量的命名规范: 成员变量都以下划线“_”开头
作用:1> 可以跟get方法的名称区分开
2> 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
封装的好处
1> 过滤不合理的值
2> 屏蔽内部的赋值过程
3> 让外界不必关注内部的细节
类方法和对象方法对比
1> 类方法:
1、以加号+开头
2、只能用类名调用,对象不能调用
3、类方法中不能访问实例变量(成员变量)
4、使用场合:当不需要访问成员变量的时候,尽量用类方法
2> 对象方法:
1、以减号-开头
2、只能让对象调用,没有对象,这个方法根本不可能被执行
3、对象方法能访问实例变量(成员变量)
3> 类方法和对象方法可以同名
Self:指向了方法调用者(为指向指针),代表当前对象
用self访问成员变量,区分同名的局部变量
1、使用细节
出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数
用法:
"self->成员变量名" 访问当前方法调用的成员变量
"[self 方法名];" 来调用方法(对象方法\类方法)
2、常见错误
低级错误:用self去调用函数
类方法中用self调用对象方法,对象方法中用self调用类方法,使self死循环
二、继承
1. 继承的好处:
1> 抽取了重复代码
2> 建立了类与类之间的联系
2. 子类可以拥有父类中的所有成员变量和方法
3. 基本上所有类的根类都是NSObject
4. 注意点:
(1)不允许子类和父类拥有相同的成员变量
(2)父类放在子类之前声明
(3)子类和父类允许有相同的方法
(4)调用某个对象的方法时,优先去当前类中找,如果找不到,再去父类中找
(5)子类重新实现父类的某个方法,会覆盖父类以前的方法
5. 每个类中都有一个superclass指针指向父类
6. 继承的缺点:耦合性太强(类与类之间的关系过于紧密)
7. 继承和组合
继承:XX 是XXX
组合:XX拥有XXX (格式 : score *_score)
8.继承的使用场合
它的所有属性都是你想要的,一般就继承
它的部分属性是你想要的,可以抽取出另一个父类
super关键字
1> 可以直接调用父类中的方法
2> super处在对象方法中,就会调用父类的对象方法。处在类方法中,那么就会调用父类的类方法
3> 适用场合:子类重写父类的方法时想保留父类的一些行为
三、多态(某一类事物的多种形态)
1. 要想使用多态必须使用继承(继承是多态的前提)
2. 多态:父类指针指向子类对象
多态的体现
Person *p = [Student new];
p->age = 100;
[p walk];
子类对象赋值给父类指针
父类指针访问对应的属性和方法
3. 好处:如果函数或方法参数中使用的是父类类型,可以传入父类,子类对象
4. 局限性:父类类型的变量不能直接调用子类特有的方法,必须强制转换为子类类型变量后,才能使用