码迷,mamicode.com
首页 > 其他好文 > 详细

[黑马程序员]Objective-C 面向对象三大特性之继承

时间:2015-04-11 06:27:43      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

基本概念

程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量)。

比如我们前文(Objective-C 面向对象三大特性之多态)中提到的Animal和Dog类:

#import <Foundation/Foundation.h>

@interface Animal : NSObject
-(void) eat;
@end

@implementation Animal

-(void) eat{
    NSLog(@"Animal eating...");
}

@end

@interface Dog : Animal
@end

@implementation Dog

-(void) eat{
    NSLog(@"Dog eating...");
}

@end

其中Dog类是继承于Animal类的。

  • Dog类是Animal类的子类
  • Animal类是Dog类的父类

优缺点

优点:

  • 抽取出了重复代码
  • 建立了类与类之间的联系

缺点:

  • 耦合性太强

在OC中的特点:

  • 单继承,也就是说,每个类只有一个直接父类
  • 都拥有一个共同的父类NSObject(因为NSObject实现了很多底层功能,如果不继承于NSObject,类将无法创建实例)

使用注意

  1. 编译器从上往下执行,所以在子类前面至少应该要有父类的声明
  2. OC中不允许子类和父类拥有相同名称的成员变量名
  3. OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找
  4. 重写即子类重新实现了父类中的某个方法,覆盖了父类以前的实现

技术分享

示意图:一共有三个类,Person类继承了NSObject类,Student类继承了Person类。

Student *s=[[Student alloc] init];

此时会把Student类和这个类的父类加载进内存。

提示:

  • 每个类中都有一个super class指针,该指针指向自己的父类
  • 对象中有一个isa指针,该指针指向调用该对象的类

继承和组合

适用场合:

  • 继承:当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中
  • 组合:当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合

形式:

  • 继承:###是xxx,如狗是动物,可以让狗继承动物类
  • 组合:###拥有xxx,如学生有书,可以让书这个类作为学生类的属性

[黑马程序员]Objective-C 面向对象三大特性之继承

标签:

原文地址:http://www.cnblogs.com/imabel/p/4416102.html

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