您的位置:首页 > 移动开发 > Objective-C

黑马程序员—Objective-C基础_封装、继承、多态

2014-03-27 00:08 651 查看
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!
----------------------


封装


将成员变量的访问和修改限制在对象内部进行操作,保证数据的安全性。

 

@interface Person : NSObject
{
    NSString *_name;
}
- (void)setName:name;
- (NSString *)name;
- (void)run;
@end

@implementation Person
- (void)setName:name
{
    _name = name;
}
- (NSString *)name
{
    return _name;
}

- (void) run
{
    NSLog(@"跑一圈");
}
@end

成员变量:以_开头,用于区分set方法参数名称、get方法名称,以及局部变量名称。

NSString *_name;

ste方法:使用set方法对成员变量进行赋值,可以在方法内对参数进行过滤,保证数据的合理性
- (void)setName:(NSString
*)name;

命名规范:

1> 方法名必须以set开头,后跟成员变量名称,名称首字母大写。

2> 没有返回值,接收一个参数,类型与成员变量类型一致

3> 形参与成员变量名不一样
get方法:返回对象内部的成员变量

- (NSString *)name;
命名规范:

1> 有返回值,类型与成员变量类型一样

2> 方法名称和成员变量名称一样

3> 不需要接收参数

继承

当两个类拥有相同的成员变量和方法时,可以把相同的内容抽取到一个父类之中。或者当A类所拥有的成员变量和方法和B类中的部分成员变量和方法形同时,可以让B类继承A类。如下:

 

@interface Student : Person

- (void)eat;
@end

@implementation Student

- (void)eat
{
    NSLog(@"%@吃了一顿",self->_name);
}

- (void)run // 重写父类run方法
{
    [self eat]; // 调用当前对象eat方法
    
    [super run]; // 调用父类run方法
}
@end

这里Student类继承自Person类,Student类包含了Person类中所有的成员变量和方法。

继承的好处
1> 抽取重复代码
2> 建立类与类之间的关系
3> 子类拥有父类所有成员变量和方法,所有类的根类都是NSObjcet 。

self和super
self用途:代表调用它的当前对象或者类。

在对象方法内可以使用(self->成员变量名)来访问当前对象内部的成员变量。 
使用[self 方法名]可以调用其他对象方法或者类方法。

super用途:直接调用父类中的某个方法。当子类重写父类的方法,需要保留父类方法的实现时,可以使用super。

super用在对象方法内,调用父类的对象方法;在类方法内,调用父类的类方法。 

多态
多态是建立在继承的基础之上的,没有继承就没有多态。如下:
 

int main()
{
    // 定义一个指向Person的指针指向Student对象
    Person *p = [Student new];
    [p setName:@"jack"]; // 使用set方法设置对象名字
    NSLog(@"%@",[p name]); // 使用get方法或取对象名字
    
    [p run];// 调用run方法,此方法父类和子类都有,并且在子类内部重写
    // [p eat]; // 此方法为子类特有方法,无法直接调用
    
    Student *p1 = (Student *)p; // 将Person类型转换为Student类型
    [p1 eat];
    [p1 run]; // 调用子类对象方法
    return 0;
}

多态体现在父类类型的指针可以指向子类对象。但是父类类型的变量不能直接调用子类特有的方法,必须强制转换为子类类型变量后,才能直接调用。

当函数或者方法参数内使用的是父类类型,可以传入父类或者子类对象。

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!
----------------------

详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: