封装
封装的原理:
实例变量默认只能被当前类的对象方法访问,如果强行要访问,只能在成员变量的声明前加@public,而这样的成员变量就暴露给了外界,是不安全的。封装就是不允许外界直接访问成员属性,提供set和get方法给外界,用于设置和获取属性的值。我们可以在set方法里面对参数进行过滤,防止外界的恶意修改。
封装的好处:
(1)过滤不合理的值 (2)屏蔽内部的赋值过程 (3)让外界不必关注内部的细节
set方法的作用:用来设置成员变量,可以在方法里面过滤掉不合理的值
get方法的作用:返回对象内部的成员变量
成员变量的命名规范:
(1)成员变量都以下划线 _ 开头
(2)可以跟get方法的名称区分开
(3)可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
调用方法有两种:一种是使用[p setAge],[p age],另一种是使用点语法,p.age,编译器会根据是赋值还是被赋值来判断使用get方法还是set方法,然后用相应的调用方法替换。
继承
如果两个类有相同的属性和行为,可以抽取出来组成一个新的类,这个新的类就是前面两个类的父类。而前两个类称之为子类。
子类可以在父类的基础上扩充属性和方法,这就是继承。
继承的优点:
(1)不改变原来模型的基础上,扩充方法
(2)建立了类与类之间的联系
(3)抽取了公共代码
继承的细节:
(1)属于单继承(子类只能继承一个父类)
(2)属性不可重定义 (3)方法可重写
(4)父类的私有属性能被继承,不能被使用
多态
多态的条件:有继承关系、有方法重写
代码体现:用父类类型的指针指向了子类对象,这就是多态
多态的局限性:
不能访问子类的属性(可以考虑强制转换)
多态的细节:
动态绑定:在运行时根据对象的类型确定动态调用的方法