一.set方法和get方法(封装性)
1.为什么会有set方法和get方法:@public的成员变量可以被随意地访问,不安全,对于成员变量的值也需要过滤,这也不符合封装的思想。所以我们尽量不要用@public,并且用set和get这2个方法来管理成员变量。
2.set方法
(1)作用:提供一个方法给外界用来设置成员变量,就是可以修改成员变量,并且可以在方法里面过滤掉一些不合理的值
(2)命名规范:方法都是以set开头,而且后面跟上不包括下划线的成员变量名,成员变量名的首字母必须大写,形参名称不要跟成员变量同名,返回值一定是void,一定接收一个参数,并且参数类型和成员变量类型一样。
(3)代码:
- (void)setAge:(int)age; // 成员变量_age的set方法的声明
3.get方法
(1)作用:返回对象内部成员变量的值,就是获取这个成员变量的值
(2)命名规范:get方法的名称和成员变量同名,不包括下划线,肯定有返回值,并且返回值类型和成员变量类型一样,不接收参数。
(3)代码:
- (int)age; // 成员变量_age的get方法的声明
4.成员变量的命名规范
成员变量都以下划线_开头。
作用:
(1)这就可以跟get方法区别开来。
(2)还可以跟其他局部变量区分开来,一看到下划线开头的变量,就知道是成员变量。
5.set和get这样封装的好处
(1)过滤不合理的值
(2)屏蔽内部的赋值过程
(3)让外界不必关注内部的细节
二.继承
1.继承的基本用法
@interface Person : NSObject (:就是表示Person继承NSObject这个类)。
两个类,把里面相同属性和相同行为抽出来组成一个新的类,比如猫和狗这两个类把他们共同的属性和方法抽出来组成一个动物类。继承必须符合逻辑。猫和狗都属于动物,所以可以继承动物这个类。如果不符合逻辑,可以使用组合方法。获得类的成员变量和方法。子类继承父类后就会拥有父类的所有方法和成员变量
2.继承的专业术语
(1)父类\超类 superclass(当前类继承的类)
(2)子类 subclass\subclasses(继承当前类的类)
3.继承的细节
(1)OC的继承是单继承,就是一个类只能继承唯一一个类(除了根类)。
(2)子类和父类不能有相同的成员变量,子类继承父类后,不能再写一个和父类相同的变量。
(3)方法可以一样,但这样子类调用方法时就会先调用自己的方法,如果没有才去父类找这个方法。就像就近原则,这
样就覆盖父类的方法,也就是方法的重写。
(4)父类必须声明在子类前面(编译器从前往后看)
4.super关键字
使用和self相似,但是self是当前对象或者当前类,而super表示父类或者父类对象,即用来调用父类的对象方法或者类方法。
作用:
(1).直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法。
super处在类方法中,那么就会调用父类的类方法。
(2)使用场合:子类重写父类的方法时想保留父类的一些行为时。
5.继承的分析
(1)不改变原来模型的基础上,(子类拥有父类的所有成员变量和方法)扩充方法和成员变量,。
(2)建立了类和类之间的关系。
(3)抽取公共的代码,避免代码的重复。
(4)坏处:耦合性太强,子类完全依靠父类,父类不存在了,子类也就没用了。
6.继承的使用场合
(1)它的属性都适合你,你就可以继承。
(2)它的属性部分适合你,可以抽出共同部分作为父类。
(3)一切的前提符合逻辑关系,不符合逻辑关系,但是想拥有那个类的所有方法和成员变量,可以使用组合方法,定义一个那个类类型的成员变量
7.补充
(1)对象里面有isa指针指向所属的类。
(2)类里面也有superClass指针指向父类
(3)组合:一个类里面定义另外一个类作为自己的成员变量,这样这个类就可以用户另外那个类的所有方法和成员变量。
(4)一个类的继承另外一个类,从而就拥有了那个类的方法和成员变量。但是继承要符合逻辑关系,不符合逻辑关系而要用那个类的方法和成员变量的时候,可以用组合。
三.多态
1.多态的基本概念
某一类事物的多种形态,例如动物这个类可以表示猫和狗,因为他们都是动物,动物有猫和狗这2种形态。
2.多态的体现
(1)子类对象赋值给父类指针(猫或狗这个类建立一个对象赋值给一个动物类类型的指针)
(2)父类指针访问对应的成员变量和对象方法
3.多态的好处
用父类指针接收子类对象,可以接收多个不同子类对象,即函数\方法参数中使用的是父类类型,可以传入父类、子类对象,这样节省代码。
4.多态的局限性
父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法。
5.多态的细节
动态绑定:在运行时根据对象的类型确定动态调用的方法,即调用方法时会检测对象的真实形象,即使是父类的指针,但是存放的是子类的对象。
6.补充
(1)OC对象是具有多态性的。
(2)没有继承就没有多态