面向对象的三大特征--封装/继承/多态

来源:互联网 发布:淘宝卖家一直不发货 编辑:程序博客网 时间:2024/04/30 03:51

封装

什么是封装?

  • 封装: 屏蔽内部实现的细节, 仅仅对外提供共有的方法/接口;

封装的好处

  • 保证数据的安全性;
  • 将变化隔离;
  • 对传入的数据进行过滤;
  • 监听数据的变化;

    //监听数据的变化@implementation Kline- (void)setMin:(int)min{// 封装还有一个好处: 监听属性的变化    _min = min;// 每次重新设置最小值, 那么就重新计算平均值    _average = (_min + _max) / 2;}- (void)setMax:(int)max{    _max = max;//    self.max = 10;// 每次重新设置最大值, 那么就重新计算平均值_average = (_min + _max) / 2;}

封装的规范

  • 原则: 将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问.
  • 一般情况下不会对外直接暴露成员变量,成员变量都需要封装起来,提供一些公共的方法进行赋值.

不封装的缺点

  • 不封装的缺点:当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对该成员变量的管理权,别人可以任意的修改你的成员变量。
  • 封装就是将数据隐藏起来,只能用此类的方法才可以读取或者设置数据,不可被外部任意修改是面向对象设计本质。这样降低了数据被误用的可能性 ,提高代码的灵活性!
    • 可以采用getter–setter来提供成员变量的外部接口;
    • Xcode中提供了编译器指令@property和@synthesize 来帮助我们完成成员变量的外部接口工作;
    • Xcode4.4以后升级了@property功能,提供增强版的@property指令.

继承

什么是继承?

  • A类派生出B类,B类拥有A类所有的属性和方法,B类叫做A类的子类,A类叫做B类的父类(或超类);这种子类具有父类特性的概念就叫做继承.

继承的注意点

  • 基类的私有属性能被继承,不能在子类中访问;
  • OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类;
  • 满足继承的条件:
    • 子类与父类的关系也称为isA(是一个)关系,我们说子类isA父类,也就是子类是一个父类,比如狗类继承动物类,那么我们说狗isA动物,也就是狗是一个动物。在如汽车继承交通工具,那么们说汽车isA交工工具,也就是汽车是一个交通工具.

OC中如何实现继承?

  • 在声明子类的时候,在子类名称后面通过”:父类名称”的方式来实现继承.
 @interface 子类名称 : 父类名称 @end

继承的缺点

  • 耦合性太强(依赖性太强).

多态

什么是多态?

  • 多态就是某一事物的多种形态.
  • 程序中的多态是:父类指针指向子类对象.
//Animal类是Dog类的父类,Dog类重写了eat方法Animal *a1 = [Dog new];[a1 eat];//动态类型:在编译的时候编译器只会检查当前类型对应的类中有没有需要调用的方法;在运行时,系统会自动判断a1的真实类型.

多态的条件

  • 1.具有继承关系;
  • 2.子类重写父类方法;
  • 3.父类指针指向子类对象.

多态的优点

  • 简化了编程优点,提高代码的扩展性和复用性.

多态的注意点

  • 如果父类指针指向子类,父类需要调用子类特有方法的时候,那么需要将父类指针强制类型转换为子类后才能调用.

多态的实现

    //Animal是父类,子类有Cat和Dog,子类分别重写了父类中的eat方法;实例化对象的时候可以用下面的方法:    Animal *animal = nil;    //实例化猫的对象    animal = [Cat new];    [animal eat];    //实例化狗的对象    animal = [Dog new];    [animal eat];
0 0