前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下。

  一.  继承

    在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在Object C中也同样如此。

    先定义一个Person类,并且定义几个属性和一个方法:

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Person : NSObject{
  4. NSString *name;
  5. int age;
  6. NSArray *itmes;
  7. }
  8. @property (nonatomic,retain) NSString *name;
  9. @property (nonatomic,assign) int age;
  10. @property (nonatomic,retain) NSArray *itmes;
  11.  
  12. -(void) write;
  13. @end

    在上面的代码中,Person类定义了三个属性name,age,items,对应的类型分别为NSString,int,NSArray. 其中还有一个方法write,返回值类型为void,没有输入参数。其具体描述内容如下:

  1. #import "Person.h"
  2.  
  3. @implementation Person
  4.  
  5. @synthesize name;
  6. @synthesize age;
  7. @synthesize itmes;
  8.  
  9. -(void) write{
  10. NSLog(@"%d",self.age);
  11. NSLog(@"Person 对象调用write方法");
  12. }
  13.  
  14. @end

    在write方法中我们可以看到输出了age,并且输出一个字符串,这里又来标识具体调用哪个方法。

    再定义一个Student类, 继承Person类,在 Student 类中定义一个属性 address ,为NSString类型,并且定义一个方法eat,返回值类型为void,没有输入参数,具体的代码如下:

  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3.  
  4. @interface Student : Person{
  5. NSString *address;
  6. }
  7. @property (nonatomic,retain) NSString *address;
  8.  
  9. -(void) eat;
  10.  
  11. @end
  12.  
  13. -------------------------------------------------------------------
  14. #import "Student.h"
  15.  
  16. @implementation Student
  17. @synthesize address;
  18.  
  19. -(void) eat{
  20. NSLog(@"Student 调用eat方法");
  21.  
  22. }
  23.  
  24. @end

    通过如上代码,Student就继承了Person类的属性和方法。

  1. Person *person=[[Person alloc] init];
  2. person.age=;
  3. [person write];
  4. Student *student=[[Student alloc] init];
  5. student.address=@"上海";
  6. student.age=;
  7. [student eat];
  8. [student write];

    输出如下结果:

  1. -- ::30.990 ObjectCApress[:]
  2. -- ::30.992 ObjectCApress[:] Person 对象调用write方法
  3. -- ::30.993 ObjectCApress[:] Student 调用eat方法
  4. -- ::30.994 ObjectCApress[:]
  5. -- ::30.995 ObjectCApress[:] Person 对象调用write方法

    通过以上代码我们可以看出,Student继承了父类Person的属性和方法。

  二. 重写

    在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.这个时候我们就需要重写父类方法,但是在Object C中重写和.NET中的重写有点区别,不需要使用特殊的关键字标识。

    在Object C重写父类方法,只需要重新实现该方法即可,代码如下:

  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3.  
  4. @interface Student : Person{
  5. NSString *address;
  6. }
  7. @property (nonatomic,retain) NSString *address;
  8.  
  9. -(void) eat;
  10.  
  11. @end
  12.  
  13. -------------------------------------------------
  14. #import "Student.h"
  15.  
  16. @implementation Student
  17. @synthesize address;
  18.  
  19. -(void) eat{
  20. NSLog(@"Student 调用eat方法");
  21.  
  22. }
  23.  
  24. -(void) write{
  25. NSLog(@"调用Student的Write方法");
  26. }
  27.  
  28. @end

    上面的代码中看出Student.m类中有一个write方法,其就是重写父类方法,不需要使用任何其他的修饰符。在上面的代码我们测试得到如果student类调用write 方法,其实是调用父类的方法,这里Student再调用write方法看看:

  1. Student *student=[[Student alloc] init];
  2. student.address=@"上海";
  3. student.age=;
  4. [student eat];
  5. [student write];

    输出结果如下:

  1. -- ::21.055 ObjectCApress[:] Student 调用eat方法
  2. -- ::21.058 ObjectCApress[:] 调用StudentWrite方法

    结果输出"调用Student的write方法",说明这里不是调用的父类方法了。

三. 在子类调用父类方法

    在.NET中我们可以使用super关键字来调用,在在Object C中也可以使用super 来调用父类的方法。

  1. -(void) write{
  2. NSLog(@"调用Student的Write方法");
  3. [super write];
  4. }

    修改Student.m中的write方法,在这个方法中添加[super write] 语句用来调用父类的write方法。输出结果如下:

  1. -- ::28.164 ObjectCApress[:] Student 调用eat方法
  2. -- ::28.167 ObjectCApress[:] 调用StudentWrite方法
  3. -- ::28.168 ObjectCApress[:]
  4. -- ::28.168 ObjectCApress[:] Person 对象调用write方法

    同样使用以上代码来测试,得到如上输出的结果,从结果中我们可以看得出,使用super调用了父类方法。

  四. 重载

    .NET中重载就是方法名相同而输入参数不一样,在Object C中并没有重载。

  1. -(void) eat;
  2. -(void) eat(int a);

    我们尝试使用.NET的那种方式重载方法,如上代码,使用编译器编译报错,因为Object C中不支持方法的重载。

Object C学习笔记23-继承,重写,重载(转)的更多相关文章

  1. Object C学习笔记23-继承,重写,重载

    前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下. 一.  继承 在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在 ...

  2. C++学习笔记23,类内函数重载

    该博文仅用于交流学习.请慎用于不论什么商业用途,本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 在一个类内,最常见的就是构 ...

  3. Java菜鸟学习笔记(23)--继承篇(二):继承与组合

    组合是什么 1.继承和组合都是一种随思想渗透而下的编码方式,其根本目的都是为了复用类,减少重复代码 2.要实现一个类的复用,可以分为组合语法和继承语法 3.组合就是通过将一个对象置于一个新类中,将其作 ...

  4. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  5. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  6. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

  7. c++学习笔记之继承篇

    title: c++学习笔记之继承篇 date: 2017-03-26 16:36:33 tags: [c++,继承,public,virtual,private,protected] categor ...

  8. Object C学习笔记24-关键字总结(转)

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  9. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

随机推荐

  1. concat、concat_ws、group_concat函数用法

    一.concat()函数可以连接一个或者多个字符串 CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. select conc ...

  2. spring+springmvc+hibernate整合遇到的问题

    spring+springmvc+hibernate整合遇到的问题2016年10月20日 23:24:03 守望dfdfdf 阅读数:702 标签: ssh学习经历的异常exception异常框架更多 ...

  3. MyEclipse 中tomcat 调试时进入未打断点的代码

    在preferences里面取消挂起未捕获异常

  4. Linux 套接字编程 - TCP连接基础

    第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取) ...

  5. 集合异常之List接口

    List接口介绍:是Collection接口中的子类, 特点: l  它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的).( ...

  6. 对json缓存进行操作

    var data={ id:1, name:"张三" } //存储缓存 var arrdata=[]; arrdata.push({id:data.id,name:data.nam ...

  7. Spring应用开发常见规范

    1.Spring应用开发常见包命名规范 controller:控制器 service:服务-接口 impl:服务-实现 integration sao:调用其他模块的,把feign的调用放到这个下面 ...

  8. Dubbo架构原理

    1 Dubbo核心功能 Remoting:远程通讯,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式. Cluster: 服务框架,提供基于接口方法的透明远程过程调用 ...

  9. ahp层次分析法软件

    http://www.jz5u.com/Soft/trade/Other/58808.html 权重计算 归一化 本组当前数 - 本组最小 / 本组最大-本组最小 http://blog.csdn.n ...

  10. Centos7设置文件夹写入权限

    用 root 账号执行chmod命令: #chmod -R 777 dirPath 参数 -R 表示递归,dirPath及其之内的所有文件夹.文件都被改变了权限. 例子: #chmod -R 777 ...