OC学习笔记三---面向对象三大特性
2015-01-27 15:56
197 查看
一、封装
1.为什么要封装?
在前面的学习中,我们如果要访问成员变量,就直接在成员变量的声明之前加上@public,而这样成员变量就直接暴露给了外界,这样是不安全的。封装就是不允许外界直接访问成员属性,提供set和get方法给外界,用于设置和获取属性的值。我们可以在set方法里面对参数进行过滤,防止外界的恶意修改。2.set和get方法的使用
在@interface中加入set和get方法的声明@interface student ...... /*set方法*/ - (void) setAge:(int)age; /*get方法*/ - (int) age; @end
在@implementation中加入set和get方法的实现
@implementation Student ...... // set方法的实现 - (void) setAge:(int)age { if (age<=0) { age= 1; } _age= age; } // get方法的实现 - (int) age { return _age; } @end
调用方法有两种:一种是使用[p setAge],[p age],另一种是使用点语法,p.age,编译器会根据是赋值还是被赋值来判断使用get方法还是set方法。
二、继承
1.对继承的理解
如果两个类有相同的属性和行为,可以抽取出来组成一个新的类,这个新的类就是前面两个类的父类。类似动物的分类,像猫和老虎外形和行为都有相同的地方,就可以把他们分为猫科动物。子类如果继承了父类,就会有父类所有的属性和方法。子类是对父类的一个扩充。2.继承基本用法
动物都有体重属性和吃的行为,把它们抽取出来组成一个父类// Animal的声明 @interface Animal : NSObject { @public int weight; } - (void)eat; @end // Animal的定义 @implementation Animal - (void)eat { NSLog(@"吃吃吃-体重:%d", weight); } @end
Bird和Dog都属于动物,所以继承动物,并且扩充了一些行为。
// Bird的声明 @interface Bird : Animal { @public int height; } - (void)fly; @end // Bird的定义 @implementation Bird - (void)fly { NSLog(@"飞飞飞-高度:%d", height); } @end
// Dog的声明 @interface Dog : Animal { @public int speed; } - (void)run; @end // Dog的定义 @implementation Dog - (void)run { NSLog(@"跑跑跑-速度:%d", speed); } @end
3.使用继承注意事项
1)OC中的继承是单继承2)使用super调用父类的类方法和对象方法
3)子类和父类不能有相同的成员变量
4)在子类中可以重写父类的方法
5)调用某个方法时,优先去当前类中找,如果找不到,去父类中找
6)父类必须声明在子类之前
三、多态
多态的产生是由于继承,但是与继承相比,多态就简单多了。多态的核心总结起来就一句话“子类对象赋值给父类指针”。例如:Animal *a = [Dog new];多态最常用的用法就是在方法的参数中使用,参数类型定义为父类类型,调用方法的时候用子类类型。这样就增加了方法调用的灵活性。多态也有一个局限性:父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法。
相关文章推荐
- 面向对象三大特性——继承
- 黑马程序员---OC面向对象三大特性(封装、继承、多态)
- java面向对象的三大特性
- 面向对象——三大特性之——封装
- java:面向对象的三大特性之一:继承
- 面向对象三大特性五大原则 + 低耦合高内聚
- 面向对象三大特性之多态(C++)
- 面向对象三大特性
- Java之面向对象的三大特性:封装,继承,多态讲解
- 面向对象三大特性概述[封装、继承、多态]
- Java面向对象三大特性之多态
- 【java基础知识】面向对象三大特性之继承
- 面向对象三大特性---继承
- 黑马程序员——OC基础——面向对象的三大特性(一)
- 面向对象三大特性:继承、封装、多态
- javase面向对象三大特性之封装
- Java面向对象三大特性
- java面向对象三大特性之封装
- OC语言-02面向对象的三大特性
- 面向对象的三大特性