IOS第七天——Obj-C中的继承

今天主要学习的就是Obj-C中的继承了,关于这个问题呢,其实我想只要学过其他语言的编程的话,基本上都会涉及到继承,继承可以说减轻了我们的代码工作量,同时它也总结了事物的一个共通的特性,共有的属性我们就可以写在统一的父类中。举个例子来说,猴子和老鹰,他们都是生物,都可以进食、呼吸、求偶等,所以我们可以定义一个共同的父类动物,但是猴子会爬树,老鹰会飞,这就是他们各自不同的特点了,那么至于各自不同的特点我们就可以在子类中来单独实现。

那么言归正传,我们先看下Obj-C中继承的语法:

@interface subClassName:superClassName

我们再实际动手写个例子来看下:

//定义一个父类
@interface rootClass
-(void)rootClassMethod1;
-(void)rootClassMethod2;
-(void)rootClassMethod3;
@end

@implementation rootClass
-(void)rootClassMethod1
{
    NSLog("this is rootClassMethod1");
}
-(void)rootClassMethod2
{
    NSLog("this is rootClassMethod2");
}
-(void)rootClassMethod3
{
    NSLog("this is rootClassMethod3");
}
@end

//定义一个子类
@interface subClass : rootClass
-(void)rootClassMethod1;
-(void)subClassMethod;
@end

@implementation subClass
-(void)rootClassMethod1
{
    NSLog("this is rootClassMethod1 overwrite in subClass");
}
-(void)subClassMethod
{
    NSLog("this is subClassMethod");
}
@end

int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init];
    rootClass *root=[[rootClass alloc] init];//实例化一个父类对象
    subClass *sub=[[subClass alloc] init];//实例化一个子类对象
    
    [root rootClassMethod1];//调用方法1
    [root rootClassMethod2];//调用方法2
    [root rootClassMethod3];//调用方法3
    
    [sub rootClassMethod1];//调用父类方法1
    [sub rootClassMethod2];//调用父类方法1
    [sub rootClassMethod3];//调用父类方法1
    [sub subClassMethod];//调用子类方法
    
    [root release];//释放root
    [sub release];//释放sub
    [pool drain];//释放对象释放池
    
    return 0;
}

程序最终的输出结果如下:

Output:

this is rootClassMethod1

this is rootClassMethod2

this is rootClassMethod1 overwrite in subClass

this is rootClassMethod2

this is rootClassMethod3

this is subClassMethod

OK,没有什么特别难以理解的地方,那么我们为何要使用继承呢,开头也说过了,并不是为了继承而去继承,主要是为了我们可以通过对父类的继承实现一定的扩展,继承主要有以下几种典型的用法:

1.代码复用。两个类有部分相同的代码,那相同的部分我们就没必要去复制粘贴,完全就可以把公共的部分放在父类中,子类去继承,只需要实现一次相同的部分即可。

2.创建协议类。父类为子类规定了一些方法,哪怕是空的,但我们可以默认为父类为他的子类创建了一种协议,当不同的类实现同名的方法的时候,程序就可以采用多态的设计。

3.通用性能的发布。程序员可以定义一些基本的、通用的、可以解决某些问题的类,但是没有处理代码,那么其他的程序员可以创建子类来继承并且满足特定的需求。

4.需要对现有逻辑进行轻微改动。例如有个类在程序中的工作表现良好,但是另一个程序员想要修改其中的某些参数,那么他就可以继承这个类,并且在子类中修改而无需涉及到父类。

5.功能预览。子类可以帮助我们进行选择测试,实现父类的一些方法,


还有一个重点就是要记住,Obj-C中的继承是单继承,不支持多继承。


OK,今天的学习就到这里了,其实到目前为止,学到的一些都是比较基础的东西,所以这也打算是告诫自己,要把基础打牢,不能直接上来就写个Hello World了事,持之以恒地学习才是王道。PS:明天要去爬山了,做下户外运动,每天都是坐在电脑桌前敲代码是不行的,偶尔也要放松一下,用我们老大的话来说就是先给你们带个入门级别的户外运动,所以我觉得我这辈子离不开从入门到精通这几个字儿了,不过话说回来,又有多少技术或者东西,是我能入门但不能精通了的呢?希望不会累个半死然后都没力气写博客了,反正就算没人看吧,我觉得在我个人来说,也是一个学习的过程。

2013年04月20日,Eric.Tang 记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值