Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习
先来定义一个Human父类
定义部分:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//// Human.h// OOP//// Created by jimmy.yang on 11-2-9.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import <Foundation/Foundation.h>@interface Human : NSObject { BOOL sex;}+(void) toString;-(void) showSex;@end |
注:+(void)前的加号,就表示这一个是类方法(static 方法),而-(void)表示这是一个实例方法
实现部分:
注意:下面的 -(id) init 即为构造函数。对应的,还有一个-(void)dealloc方法用来释放资源(类似于析构函数或c#中的dispose()方法)-注:dealloc方法以后在内存管理中详细学习,这里先不管它。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
//// Human.m// OOP//// Created by jimmy.yang on 11-2-9.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import "Human.h"@implementation Human//构造函数-(id) init{ NSLog(@"init() in Human is called"); sex = TRUE; return(self);}//static类方法+ (void)toString{ NSLog(@"this is a class method of Human");}//实例方法- (void)showSex{ NSLog(@"my sex is %@",sex?@"MALE":@"FEMALE");}@end |
再来定义一个Woman子类
定义部分:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//// Woman.h// OOP//// Created by jimmy.yang on 11-2-9.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import <Foundation/Foundation.h>#import "Human.h"@interface Woman : Human { BOOL married;}-(void) canCook:(NSString*) foodName;-(void) setMarried:(BOOL)m;-(BOOL) Married;@end |
实现部分:
注意下面的:setMarried 与 Married 就是obj-C中属性的标准写法(当然以后还能看到其它简化的写法)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
//// Woman.m// OOP//// Created by jimmy.yang on 11-2-9.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import "Woman.h"@implementation Woman//Woman类的构造函数-(id) init{ NSLog(@"init() in Woman is called!"); if (self==[super init]){ sex = FALSE; married = FALSE; } return (self);}//overwrite父类中的toString()+(void)toString{ NSLog(@"This is Woman's ToString()");}//Woman能做饭-(void)canCook:(NSString*) foodName{ NSLog(@"I can cook %@",foodName);}//属性的setter-(void) setMarried:(BOOL)m{ married = m;}//属性的getter-(BOOL) Married{ return married;}@end |
main方法中的调用:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#import <Foundation/Foundation.h>#import "Human.h"#import "Woman.h"int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // insert code here... NSLog(@"Hello, World!"); //调用类的“静态”方法 [Human toString]; NSLog(@"----------------"); //创造一个Human的实例 Human *man = [Human new]; //调用man的showSex方法 [man showSex]; NSLog(@"----------------"); //定义一个Woman子类的实例 Woman *wife = [Woman new]; [wife canCook:@"Rice"]; //调用继承自父类的方法 [wife showSex]; //设置属性 [wife setMarried:TRUE]; //读取属性值 NSLog(@"wife's married = %@",wife.Married==NO?@"FALSE":@"TRUE"); NSLog(@"----------------"); //调用overwrite后的toString方法 [Woman toString]; //Factory模式中常用的手法,在这里依然适用(只不过编译时会有警告 'Human' may not respond to '-canCook:') Human *wife2 = [Woman new]; [wife2 canCook:@"soap"]; NSLog(@"----------------"); [pool drain]; return 0;} |
运行结果:
2011-02-09 17:01:02.016 OOP[1725:a0f] Hello, World!
2011-02-09 17:01:02.053 OOP[1725:a0f] this is a class method of Human
2011-02-09 17:01:02.062 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.075 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.091 OOP[1725:a0f] my sex is MALE
2011-02-09 17:01:02.094 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.099 OOP[1725:a0f] init() in Woman is called!
2011-02-09 17:01:02.104 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.105 OOP[1725:a0f] I can cook Rice
2011-02-09 17:01:02.108 OOP[1725:a0f] my sex is FEMALE
2011-02-09 17:01:02.109 OOP[1725:a0f] wife's married = TRUE
2011-02-09 17:01:02.111 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.116 OOP[1725:a0f] This is Woman's ToString()
2011-02-09 17:01:02.120 OOP[1725:a0f] init() in Woman is called!
2011-02-09 17:01:02.121 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.123 OOP[1725:a0f] I can cook soap
2011-02-09 17:01:02.125 OOP[1725:a0f] ----------------
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习的更多相关文章
- 覆写equals方法为什么需要覆写hashCode方法
覆写equals方法必须覆写hashCode方法,是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢? void test() { // Person类的实例作为Map的k ...
- 11.JAVA-Object类之finalize(),clone(),toString()等方法覆写
1.Object介绍 Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用 ...
- [改善Java代码]推荐覆写toString方法
建议49: 推荐覆写toString方法 为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码: public ...
- Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
- 菜鸡的Java笔记 第二十 - java 方法的覆写
1.方法的覆写 当子类定义了与父类中的完全一样的方法时(方法名称,参数类型以及个数,返回值类型)这样的操作就称为方法的覆写 范例:观察方法的覆写 class A{ public void ...
- 在C#中该如何阻止虚方法的覆写
在开发过程中,我们为了让一个类更有生命力,有时会用virtual来修饰一个方法好让子类来覆写它.但是如果有更新的子子类来覆写时,我们又不想让其影响到上一层的覆写,这时候就要用到new virtual来 ...
- 如何设置 Internal 类,方法,属性对其他项目可见
internal 修饰符时程序集内部其他类可见.但对程序集外的类不可见,这样就很好的封装了可见性. 但是,我们也许会碰到类似的情况,特别是基于已有代码开发新的代码时,你会发现很多 internal 的 ...
- [你必须知道的.NET]第十七回:貌合神离:覆写和重载
本文将介绍以下内容: 什么是覆写,什么是重载 覆写与重载的区别 覆写与重载在多态特性中的应用 1. 引言 覆写(override)与重载(overload),是成就.NET面向对象多态特性的基本技术之 ...
- Java 覆写初探
Java 覆写 继承性的主要特征是子类可以根据父类已有的功能进行功能扩展,但是在子类定义属性或方法的时候有可能定义属性和方法和父类同名,在此类情况下就称为:“覆写”. 方法的覆写:[改良原本功能不足的 ...
- 8.2.3 覆写 Equals
经过对四种不同类型判等方法的讨论,我们不难发现不管是 Equals 静态方法.Equals 虚方法 抑或==操作符的执行结果,都可能受到覆写 Equals 方法的影响.因此研究对象判等就必须将注意 力 ...
随机推荐
- 如何删除git远程分支(转)
1,在开发过程中,大家在远程创建了许多分支,有些是无用的,该如何删除呢,可以参考下面的方法. 如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放 稳 ...
- ifconfig与内核通信 ifreq 结构体分析和使用
结构原型: /* * Interface request structure used for socket * ioctl's. All interface ioctl's must have p ...
- POJ 1392 Ouroboros Snake(数位欧拉)
题目链接:http://poj.org/problem?id=1392 题目大意:题意看的我头痛,其实跟HDU2894差不多,但是这题要求输出这条路径上第k个数,而不是输出路径. 解题思路:也跟HDU ...
- csu 1114平方根大搜索(JAVA大小数+二分)
1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 182 Solved: 96[Submit][Status][Web Boar ...
- Tutorial: Reverse debugging with GDB 7 (转载)
Tutorial: Reverse debugging with GDB 7 Tutorial: Reverse debugging with GDB 7 by Jay Conrod posted o ...
- python datetime 时区(timezone) dateutil
记录下python中的时区问题, 代码如下: 包括datetime.datetime对象使用不同的时区,以及在不同时区间转换. from datetime import datetime from ...
- Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别
转载自 https://blog.csdn.net/x1269778817/article/details/46535729 参考: https://stackoverflow.com/questio ...
- 安装 jupyter notebook 出现 ModuleNotFoundError: No module named 'markupsafe._compat' 错误
使用 python -m pip install jupyter 安装完成 jupyter notebook 之后,在命令行界面输入 "jupyter notebook "指令打开 ...
- c++ primer 4 数组和指针
类比的思想学习数组和指针,c++提供类似于vector和迭代器的低级复合类型——数组和指针.与vector相似,数组可以保存某一种类型的一组对象:而他们的区别在于,数组的长度固定,数组一经创建就不允许 ...
- 为啥我喜欢在Windows 7环境下做Unity开发?
先说明,以下情况只针对本人哦~ 前阵子我在OSX的最新版本Mavericks下做Unity开发,后来我把MacbookPro卖了,自己组装了个PC搞开发,为啥呢? 1:OSX下 MonoDevelop ...