黑马程序员--OC之类的封装继承多态使用技巧

来源:互联网 发布:淘宝售后客服考核标准 编辑:程序博客网 时间:2024/06/16 16:29

黑马程序员--OC之类的封装继承多态使用技巧

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
    1、类的封装:
     不封装的缺点:
当一个类把自己的属性暴露给外部的时候,那么该类就失去对属性的管理权
将数据隐藏起来,只能用此类的方法函数才可以访问或者设置数据,不可被外部
任意存储是面向对象设计本质。降低了数据被无用的可能性!
在OC语言中,使用@interface和@implementation来处理类。
@interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。
@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。
    1、封装的步骤
定义设置实例变量(setter)方法和访问实例变量(getter)的方法
    1)setter方法(设置器)
在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。Set方法的作用:为外界提供一个设置成员变量值的方法。
命名规范:
(1)方法名必须以set开头
(2)Set后面跟上成员变量的名称,首字母大写
(3)返回值一定是void
(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
(5)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加_以示区分)
    2)注意:
(1)在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法。

(2)成员变量名的命名以下划线开头,get方法名不需要带下划线,

使用下划线开头有两个好处:

 (1)与get方法的方法名区分开来;
 (2)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。
    2、继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有
方法的方式,产生一个新的类型。继承是一种由已有类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类。新类继承一般类的状态和行为,并根据需要增加它自己的状态和行为。 
从现有类出发定义一个新类,称为新类继承了现有的类,其中被继承的现有类叫做超类(superclass)或父类,由继承而得到的类称为子类(subclass)。 

     优点:继承给我们的编程带来的好处就是对原有类的复用(重用)。就像模块的复用一样,类的复用可以提高我们的开发效率,实际上,模块的复用是大量类的复用叠加后的效果。子类继承父类中所有可被子类访问的成员变量。

继承原则如下:

     1) 能够继承那些声明为public和protected的成员变量。

     2) 能够继承同一包中的那些默认修饰符的成员变量。

     3) 不能继承那些声明为private的成员变量。

     4) 如果子类声明一个与父类成员变量同名的成员变量,则不能继承父类的成员变量。此 时子类的成员变量称做隐藏了父类的成员变量。

  3、多态的定义:多态是不同的对象以自己的方式响应相同名称方法的能力称为多态   
     多态的条件:有继承关系、有方法重写
父类的声明变量指向子类对象。//代码体现:用父类类型的指针指向了子类对象,这就是多态
     多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
     多态的实现:

Animal是父类,子类有Cat 和 Dog,子分别重写了父类中的eat方法;

实例化对象的时候可以用下面的方法:

Animal *animal = nil;
//实例化猫的对象
animal = [Cat new];
[animal eat];
//实例化狗的对象
animal = [Dog new];
[animal eat];
     多态的原理
     动态绑定:
动态类型能使程序直到执行时才确定对象所属类型
动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法
OC不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载
id类型:通用指针类型,弱类型,编译时不进行类型检查
注意:1)如果存在多态,父类是可以访问子类特有的方法
假设子类Dog 有一个特有的方法bark
[dog bark];
Animal *an2 = [Dog new];
[(Dog*)an2 bark]; //把父类的指针,强制类型转换
2)如果不存在多态,父类是不可以访问子类特有的方法的
Animal *an3 = [Animal new];
[(Dog*)an3 bark];//错误的,不能强制转换
封装:隐藏内部实现,稳定外部接口.
封装就是定义类 定义属性 定义方法
属性封装了setter get方法 
@property(nonatomic,retain)NSString *name,*sex;
类封装了实例变量和方法
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    NSString *_name;
    NSString *_sex;
    int _age;
}
@property(nonatomic,retain)NSString *name,*sex;
@property(nonatomic,assign)int age;
- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age;
-(Person *)work;
@end
#import "Person.h"
@implementation Person
@synthesize name = _name,sex = _sex,age = _age;
- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age
{
    self = [super init];
    if (self) {
        self.name = name;
        self.sex = sex;
        self.age = age;
    }
    return self;
0 0
原创粉丝点击