Object C学习笔记23-继承,重写,重载
前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下。
一. 继承
在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在Object C中也同样如此。
先定义一个Person类,并且定义几个属性和一个方法:
#import <Foundation/Foundation.h>
@interface Person : NSObject{
NSString *name;
int age;
NSArray *itmes;
}
@property (nonatomic,retain) NSString *name;
@property (nonatomic,assign) int age;
@property (nonatomic,retain) NSArray *itmes;
-(void) write;
@end
Person类的定义
在上面的代码中,Person类定义了三个属性name,age,items,对应的类型分别为NSString,int,NSArray. 其中还有一个方法write,返回值类型为void,没有输入参数。其具体描述内容如下:
#import "Person.h" @implementation Person @synthesize name;
@synthesize age;
@synthesize itmes; -(void) write{
NSLog(@"%d",self.age);
NSLog(@"Person 对象调用write方法");
} @end
Person类
在write方法中我们可以看到输出了age,并且输出一个字符串,这里又来标识具体调用哪个方法。
再顶一个Student类,继承Person类,在Person类中定义一个属性address,为NSString类型,并且定义一个方法eat,返回值类型为void,没有输入参数,具体的代码如下:
#import <Foundation/Foundation.h>
#import "Person.h" @interface Student : Person{
NSString *address;
}
@property (nonatomic,retain) NSString *address; -(void) eat; @end -------------------------------------------------------------------
#import "Student.h" @implementation Student
@synthesize address; -(void) eat{
NSLog(@"Student 调用eat方法"); } @end
Student类
通过如上代码,Student就继承了Person类的属性和方法。
Person *person=[[Person alloc] init];
person.age=;
[person write];
Student *student=[[Student alloc] init];
student.address=@"上海";
student.age=;
[student eat];
[student write];
测试代码
输出如下结果:
-- ::30.990 ObjectCApress[:]
-- ::30.992 ObjectCApress[:] Person 对象调用write方法
-- ::30.993 ObjectCApress[:] Student 调用eat方法
-- ::30.994 ObjectCApress[:]
-- ::30.995 ObjectCApress[:] Person 对象调用write方法
通过以上代码我们可以看出,Student继承了父类Person的属性和方法。
二. 重写
在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.这个时候我们就需要重写父类方法,但是在Object C中重写和.NET中的重写有点区别,不需要使用特殊的关键字标识。
在Object C重写父类方法,只需要重新实现该方法即可,代码如下:
#import <Foundation/Foundation.h>
#import "Person.h" @interface Student : Person{
NSString *address;
}
@property (nonatomic,retain) NSString *address; -(void) eat; @end -------------------------------------------------
#import "Student.h" @implementation Student
@synthesize address; -(void) eat{
NSLog(@"Student 调用eat方法"); } -(void) write{
NSLog(@"调用Student的Write方法");
} @end
重写父类方法
在上面的代码中看出Student.m类中有一个write方法,其就是重写父类方法,不需要使用任何其他的修饰符。在上面的代码我们测试得到如果student类调用write 方法,其实是调用父类的方法,这里Student再调用write方法看看:
Student *student=[[Student alloc] init];
student.address=@"上海";
student.age=;
[student eat];
[student write];
输出结果如下:
-- ::21.055 ObjectCApress[:] Student 调用eat方法
-- ::21.058 ObjectCApress[:] 调用Student的Write方法
结果输出"调用Student的write方法",说明这里不是调用的父类方法了
三. 在子类调用父类方法
在.NET中我们可以使用super关键字来调用,在在Object C中也可以使用super 来调用父类的方法。
-(void) write{
NSLog(@"调用Student的Write方法");
[super write];
}
修改Student.m中的write方法,在这个方法中添加[super write] 语句用来调用父类的write方法。输出结果如下:
2014-04-05 15:14:28.164 ObjectCApress[1815:303] Student 调用eat方法
2014-04-05 15:14:28.167 ObjectCApress[1815:303] 调用Student的Write方法
2014-04-05 15:14:28.168 ObjectCApress[1815:303] 99
2014-04-05 15:14:28.168 ObjectCApress[1815:303] Person 对象调用write方法
同样使用以上代码来测试,得到如上输出的结果,从结果中我们可以看得出,使用super调用了父类方法。
四. 重载
.NET中重载就是方法名相同而输入参数不一样,在Object C中并没有重载。
-(void) eat;
-(void) eat(int a);
我们尝试使用.NET的那种方式重载方法,如上代码,使用编译器编译报错,因为Object C中不支持方法的重载。
Object C学习笔记23-继承,重写,重载的更多相关文章
- Object C学习笔记23-继承,重写,重载(转)
前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下. 一. 继承 在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在 ...
- C++学习笔记23,类内函数重载
该博文仅用于交流学习.请慎用于不论什么商业用途,本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 在一个类内,最常见的就是构 ...
- Java菜鸟学习笔记(23)--继承篇(二):继承与组合
组合是什么 1.继承和组合都是一种随思想渗透而下的编码方式,其根本目的都是为了复用类,减少重复代码 2.要实现一个类的复用,可以分为组合语法和继承语法 3.组合就是通过将一个对象置于一个新类中,将其作 ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记17-动态判断和选择器
当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...
- c++学习笔记之继承篇
title: c++学习笔记之继承篇 date: 2017-03-26 16:36:33 tags: [c++,继承,public,virtual,private,protected] categor ...
- Object C学习笔记24-关键字总结(转)
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
随机推荐
- 烂泥:LVM学习之逻辑卷、卷组及物理卷删除
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章,我们介绍了有关LVM的逻辑卷及卷组的空间缩小.这次我们来介绍下如何删除一个逻辑卷及卷组. 删除逻辑卷需要以下几个步骤: 1. 卸载已经挂载的逻 ...
- nyoj 38 布线问题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ...
- MAVEN整理(乘国庆还有时间,停下来整理一下)
昨天写下了这篇博客(http://www.cnblogs.com/hzmark/p/131003Release.html),今天有时间,就这里一下第一篇内容. 换工作公司开发平台: WINDOWS+V ...
- Windows 网络问题
一.问题描述 每次重启后电脑的ip地址或无故没掉,或不能正常连网,要重新设置ip才能上网. 二.解决方法 在DOS窗口执行 netsh winsock reset netsh int ip res ...
- Linux 磁盘与文件系统管理
介绍一本书叫<Linux 鸟哥私房菜>, 一本教人用linux很经典的一本书,这两天又看了里面的一章节,做一点笔记.有一些很细节的东西的, 在平时运用过很容易被忽略. 1)U盘使用的文件格 ...
- GCC源码自动编译-python脚本
一.前言 目前因机器OS GCC版本太老,导致无法编译一些新版本软件,所以写了一个自动编译GCC的python脚本,操作系统是比较老的suse 10, 很多系统自动软件版本都很低,所以此脚本一般可适用 ...
- [转]Performance Analysis Using SQL Server 2008 Activity Monitor Tool
本文转自:https://www.mssqltips.com/sqlservertip/1917/performance-analysis-using-sql-server-2008-activity ...
- ZBrush中必须记住的常用快捷键
ZBrush是一款数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.强大的功能离不开便捷的操作,为此ZBrush提供了一系列常用操作快捷键,熟练掌握这些快捷键,可帮助您节省 ...
- Linux基于libmemcached,php扩展memcached的安装
安装环境:CentOS 6.4 php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcache ...
- C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?
根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推:同级节点可以用索引.名称.文本来区分.用索引区分根节点时,TreeView.Nodes[0]就是第一个 ...