码迷,mamicode.com
首页 > 移动开发 > 详细

黑马程序员_IOS开发_Objective-C学习笔记_继承和分类

时间:2015-04-25 14:58:26      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

1.什么是继承

继承是面向对象程序的三大特征之一,意思是基于一个类的基础,定义一个新类。

被继承的类成为父类,新类成为子类。

继承的实际例子有许多。例如,一个儿子继承了他父亲,那么他就继承了他父亲的财产。

 

例如基类是Person,那么我们可以继承Person这个类,产生新的子类Student,Teacher

在这里Person是Student类和Teacher类的父类。

引入继承的概念是有许多好处的:

 

*能够抽取重复代码

*建立了类和类之间的联系

*不改变原来模型的基础上,能够扩展出新的方法

 

2.objective-C中的继承

 

@interface Person:NSObject

 //Person继承了NSObject,获得NSObject类的方法;
 
@end
 
 
@interface Student :Person
 
//Student类继承Person类
 
@end

@interface Teacher:Person

//Teacher类继承Person类

@end

 

3.编程的使用注意

*父类的声明需要在子类的前面 ,不然子类无法识别未声明的语句

*子类不能拥有和父类相同的成员变量,但是子类可以重写父类原有的成员方法,例如重写dealloc方法

*调用某个成员方法时,优先去当前类中找,如果找不到,去父类中找

 

4.super

Super作为关键字的作用:

 

*直接调用父类中的某一个方法,例如[super dealloc];

*Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
     int _age;
}

- (void)setAge:(int)age;
- (int)age;

- (void)test;

@end

@implementation Person
- (void)setAge:(int)age
{
     self->_age = age;
}
- (int)age
{
     return self->_age;
}

- (void)test
{
     // self:指向了方向调用者,代表着当期对象
    int _age = 20;
    NSLog(@"Person的年龄是%d岁", self->_age);
}
 
@end
 
int main()
{
     Person *p = [Person new];
    
     [p setAge:10];
     
     [p test];
     
     return 0;
}

 

5.分类

objective-C中为什么出现分类这种机制,那么分类的好处都有啥?

例如你已经完成了一个Person类的代码。代码如下:

#import <Foundation/Foundation>

@interface Person :NSObject

- (void) run;//跑

- (void) eat;//吃

@end
 

 

但是一段时间后,我们发现Person这个类不仅需要run,eat功能,还要能做到jump和swim。那么我们一般的做法就是直接在Person类中添加jump,swim方法。当然在这里是没有任何问题的。但是在实际开发项目中,由于代码量十分巨大,以及逻辑相当复杂的情况下,我们直接修改之前源代码是冒有很大的风险的!

神说我们要有分类,于是我们便有了分类。当你仅仅是想在原有父类的基础上给父类扩充一些方法的时候,分类是一种更好的选择。

#import <Foundation/Foundation>

#import”Person.h”//既然是对原有类的接口的扩展,所以必须包括原始接口

@interface Person(jumpAndSwim)//告诉编译器这是为Person定义的分类为jumpAndSwim

- (void) jump;//跳

- (void) swim;//游

@end

这样我们就做到了在不修改原先代码的情况下,完成了方法的扩展!

但是使用分类要注意以下事项:

 

*分类可以访问原类中的成员变量,但是在分类不能添加任何成员变量。若需要添加成员变量可以考虑创建子类

*分类中的方法名可以与原类的某个方法名相同(即重载),但是原类的同名方法将失效,不能访问。

*可以创建很多的分类

黑马程序员_IOS开发_Objective-C学习笔记_继承和分类

标签:

原文地址:http://www.cnblogs.com/NSMAMU/p/4455830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!