OC基础04
面向对象的三大特征
封装
什么是封装?
属性的封装
外部人员可以改变对象的属性,或者赋值给对象属性不合法,却一样可以输入输出,寻找一种封装属性的办法,让外部人员不能轻易访问属性,需要时还可以给属性增加限制,规范数据.
setter方法(只写,硬性规定不能更改格式)
1. 先设置属性为私有属性,外部不能直接访问.
2. 为类提供方法,能为属性赋值
3. 一定是对象方法(要赋值)
4. 一定具有与对象属性数据类型相同的类型参数,参数名与属性名相同去掉下划线
5. 没有返回值,只是赋值
6. 以set开头后面接属性名首字母大写
7. 外界访问只能调用set方法存在的问题只能写入属性,不能读取,引入get方法
getter方法(只读)
1. 为属性提供一个读取的方法
2. 一定是对象方法(访问对象的属性)
3. 必须有返回值,类型与属性类型一致
4. 方法名,注意不是get加属性名,直接属性名
5. 没有参数只读封装
只写封装
继承
多个类属性方法相同含义类似,要多次复制属性和方法,代码冗余,不便于后期维护修改
子类继承父类所有属性和方法
注意
子类变量(属性和方法)不能和父类相同支持单一继承和多层继承,不支持多个继承
满足A是一个B类才能继承
只要有一个成员不是所有成员的子类都有的,就不应该定义在父类中.例子:托年是鸟不会飞,飞就不能定义在鸟类中
多态
类与类之间的关系
组合关系
一个类有其他的几个类组合而成,例子:电脑与零件的类
依赖关系
A类对象作为B类对象的参数,B类依赖于A类.B类无参数无法实现.
例子:上帝杀人
编程目标:低耦合,高内聚
低耦合:类之间关系不要联系的太紧密,不然一个类改变其他的都不能使用了
高内聚:一个对象做与自己有关的事情,不要做无关的事.
关联关系
A类对象作为B类对象的属性,但是不是组合关系.例子:狗作为人类的属性.
Xcode文档
快速帮助
option键查看
士兵突击的实例:士兵开枪,枪射击子弹
枪:型号,颜色,射击行为
士兵:名字,兵种,枪,直接用这把枪不用传参数
必须用set,get方法封装属性
快速构造属性方法
用set,get方法就可以引用出.符号
static关键字
在OC中修饰方法中的局部变量,不能修饰方法,不能修饰属性.
在C中修饰函数的局部变量变为动态变量,修饰函数不能跨文件访问,修饰全局边变量只能在当前模块中访问
extern修饰的全局变量可以跨模块访问
self关键字
思考解决的问题?
在方法中可以定义一个与属性同名的局部变量(虽然一般除了属性变量其他变量不加下划线)
怎么在这个方法中访问属性?怎么在这个方法中调用这个对象的其他对象方法?
在这个方法内定义新的对象显然不能满足这个对象调用当前方法(创建了新的对象),OC中有一个关键字可以指向自己的对象self
* 首先self是一个指针,在对象方法中指向当前对象,在类方法中指向当前类.且不能指向自己的方法.
*用法:1 访问对象的属性,调用当前对象的其他对象方法
2 调用类方法
3 声明变量时不能用self(只是指针,不是数据类型).