OC03_继承
2015-09-01 19:33
561 查看
新建一个Zombie类.
Zombie.h
Zombie.m
main.m
新建一个IronZombie类,继承于Zombie.
IronZombie.h
IronZombie.m
main.m
Zombie.h
便利构造器.
Zombie.m
main.m
Zombie.h
// // Zombie.h // OC03_继承 // // Created by dlios on 15/9/1. // Copyright (c) 2015年 sOldiers. All rights reserved. // #import <Foundation/Foundation.h> @interface Zombie : NSObject { NSInteger _hp; NSInteger _mp; NSInteger _level; NSInteger _exp; } - (void)bite; - (void)printZombie; - (NSInteger)hp; - (void)setHp:(NSInteger)hp; - (NSInteger)mp; - (void)setMp:(NSInteger)mp; - (NSInteger)level; - (void)setLevel:(NSInteger)level; - (NSInteger)exp; - (void)setExp:(NSInteger)exp; - (instancetype)initWithHp:(NSInteger)hp mp:(NSInteger)mp level:(NSInteger)level exp:(NSInteger)exp; @end
Zombie.m
// // Zombie.m // OC03_继承 // // Created by dlios on 15/9/1. // Copyright (c) 2015年 sOldiers. All rights reserved. // #import "Zombie.h" @implementation Zombie #pragma mark - Normal Method - (void)bite { NSLog(@"咬一口"); } - (void)printZombie { NSLog(@"hp : %ld, mp : %ld, level : %ld, exp: %ld", _hp, _mp, _level, _exp); } #pragma mark - Setter & Getter - (NSInteger)hp { return _hp; } - (void)setHp:(NSInteger)hp { _hp = hp; } - (NSInteger)mp { return _mp; } - (void)setMp:(NSInteger)mp { _mp = mp; } - (NSInteger)level { return _level; } - (void)setLevel:(NSInteger)level { _level = level; } - (NSInteger)exp { return _exp; } - (void)setExp:(NSInteger)exp { _exp = exp; } #pragma mark - initialization Method - (instancetype)initWithHp:(NSInteger)hp mp:(NSInteger)mp level:(NSInteger)level exp:(NSInteger)exp { // 完整版的初始化方法,要初始化父类和子类的成员变量. // 1.初始化父类的成员变量. self = [super init]; // 2.初始化本类的成员变量. // 以下三种在此可以说是一个意思. [self setHp:hp]; self.hp = hp; _hp = hp; // 3.判断父类初始化成功之后,再初始化子类内容. if(self) { _mp = mp; _level = level; _exp = exp; } return self; } @end
main.m
// 创建一个僵尸类,并调用bite方法. Zombie *z = [Zombie alloc] init]; [z bite];
新建一个IronZombie类,继承于Zombie.
IronZombie.h
// // IronZombie.h // OC03_继承 // // Created by dlios on 15/9/1. // Copyright (c) 2015年 sOldiers. All rights reserved. // #import <Foundation/Foundation.h> #import "Zombie.h" // 接口文件 类名 父类名 @interface IronZombie : Zombie { NSString *_equipment; } - (void)bite; // 以下四种方法的声明可以不写,因为父类中已有. - (NSInteger)hp; - (void)setHp:(NSInteger)hp; - (NSInteger)mp; - (void)setMp:(NSInteger)mp; - (NSInteger)exp; - (void)setExp:(NSInteger)exp; - (NSInteger)level; - (void)setLevel:(NSInteger)level; // 子类自己特有的行为要写,子类中的自定义初始化方法也要重新写,注意区别于父类已有的行为. - (NSString *)equipment; - (void)setEquipment:(NSString *)equipment; - (instancetype)initWithHp:(NSInteger)hp mp:(NSInteger)mp exp:(NSInteger)exp level:(NSInteger)level equipment:(NSString *)equipment; - (void)printIronZombie; @end
IronZombie.m
// // IronZombie.m // OC03_继承 // // Created by dlios on 15/9/1. // Copyright (c) 2015年 sOldiers. All rights reserved. // #import "IronZombie.h" @implementation IronZombie - (void)bite { // 继承父类的方法后,如果不满意父类的方法,可以在子类中写一个和父类方法名一致的方法,重新实现相对的操作. // 这种操作称之为:方法的重写. NSLog(@"咬我呀!~"); // super 编译器指令 // 调用当前类中从父类继承过来的方法. [super bite]; [super setHp:100]; NSLog(@“%ld”, [super hp]); } // 以下四种方法的实现可以不写,因为父类中已有. - (NSInteger)hp { return _hp; } - (void)setHp:(NSInteger)hp { _hp = hp; } - (NSInteger)mp { return _mp; } - (void)setMp:(NSInteger)mp { _mp = mp; } - (NSInteger)exp { return _exp; } - (void)setExp:(NSInteger)exp { _exp = exp; } - (NSInteger)level { return _level; } - (void)setLevel:(NSInteger)level { _level = level; } // 子类自己特有的行为要写,子类中的自定义初始化方法也要重新写,注意区别于父类已有的行为. - (NSString *)equipment { return _equipment; } - (void)setEquipment:(NSString *)equipment { _equipment = equipment; } - (instancetype)initWithHp:(NSInteger)hp mp:(NSInteger)mp exp:(NSInteger)exp level:(NSInteger)level equipment:(NSString *)equipment { // 可以这么写,但是太麻烦. // _hp = hp; // _mp = mp; // _exp = exp; // _level = level; // _equipment = equipment; // 我们调用父类的自定义初始化方法,只写子类特有的行为即可 self = [super initWithHp:hp mp:mp level:level exp:exp]; if (self) { _equipment = equipment; } return self; } - (void)printIronZombie { NSLog(@"hp : %ld, mp : %ld, level : %ld, exp : %ld, equipment : %@", _hp, _mp, _level, _exp, _equipment); } @end
main.m
// 创建一个铁桶僵尸类,并调用bite方法. IronZombie *ironZ = [IronZombie alloc] init]; [ironZ bite]; /* * 继承关系 * 继承:子类拥有父类所有的成员变量和方法. * 单根继承:在OC中,类有且只有一个父类,没有父类的类是NSObject,叫做根类(祖宗类). * 传递性:继承关系只针对两个类来说,在描述子类还是父类时,需要相对于某个类描述,类的内容也只分为两部分,本类内容和父类内容. * 单向性:子类和父类的继承关系一旦确认,不能不换. * super:调用父类的方法. * self:调用本类的方法. */
Zombie.h
便利构造器.
// id // 无参数 // 加号,属于类方法. // 以小写类名开头. + (instancetype)zombie; // 带参数 + (instancetype)zombieWithHp:(NSInteger)hp mp:(NSInteger)mp level:(NSInteger)level exp:(NSInteger)exp; @end
Zombie.m
#pragma mark Conventent Method + (instancetype)zombie { return [[Zombie alloc] init]; } + (instancetype)zombieWithHp:(NSInteger)hp mp:(NSInteger)mp level:(NSInteger)level exp:(NSInteger)exp { // 1.普通版 Zombie *zb = [[Zombie alloc] initWithHp:hp mp:mp level:level exp:exp]; return zb; // 2.粗暴版 return [[Zombie alloc] initWithHp:hp mp:mp level:level exp:exp]; } @end
main.m
// 定义一个Zombie类的对象zb. Zombie *zb = [[Zombie alloc] init]; // 用类调用,无参数的便利构造器的方法. Zombie *zb1 = [Zombie zombie]; // 用类调用,有参数的便利构造器的方法. Zombie *zb2 = [Zombie zombieWithHp:800 mp:200 level:100 exp:80];
相关文章推荐
- leetcode 201:Bitwise AND of Numbers Range
- 计算机为什么要用补码
- Java核心API -- 14(Socket)
- 2015多校联合第二场5308I Wanna Become A 24-Point Master
- 第三方加载图片
- Reactor Pattern Explained
- 多线程相关
- anjs 分词器初步使用
- gridview控件
- 期望时间为线性时间的选择算法(C++)
- poj 2002 Squares
- Chisel-LLDB命令插件,让调试更Easy
- flume日志收集系统搭建
- [持续更新]HTML5学习笔记(三)
- ubuntu 15.04 怎么安装搜狗输入法
- UVA 1612 Guess
- java 第七天 排序
- flume+hive处理日志
- input string from adb
- 页面跳转