OC_继承,便利构造器,初始化方法
来源:互联网 发布:质量管理体系数据分析 编辑:程序博客网 时间:2024/05/21 22:29
//
// main.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "LuZhangZombie.h"
#import "Zombie.h"
#import "TieTongZombie.h"
#import "Person.h"
int main(int argc,constchar * argv[]) {
//继承:子类会继承父类所有的特征和行为
//当对象在执行方法的时候,子类重写了父类的方法,西戎会优先使用子类的方法,如果没有重写,则使用父类的方法.
// Zombie *zombie=[[Zombie alloc] init];
// [zombie walk];
// LuZhangZombie *luZom=[[LuZhangZombie alloc] init];
// [luZom walk];
// [luZom attack];
// [luZom loseEquipment];
// TieTongZombie *tieZom=[[TieTongZombie alloc] init];
// [tieZom walk];
// [tieZom attack];
// [tieZom loseEquipment];
//继承是单向的,一个类只能有一个父类,但是一个类可以有无数个子类
//NSObject是所有类的父亲,也可以称为基类
//类的继承是有传递性的.
// NSLog(@"%@",[zombie class]);
// Zombie *zom=[Zombie alloc];
// zom=[zom init];
// Zombie *zom1=[[Zombie alloc] initWithSetBlood:200 Attack:50 Speed:25];
// [zom1 sayHi];
// LuZhangZombie *luzom=[[LuZhangZombie alloc] initWithSetBlood:100 Attack:10 Speed:5 Equipment:@"路障"];
// [luzom sayHi];
// TieTongZombie *tiezom=[[TieTongZombie alloc] initWithSetBlood:200 Attack:100 Speed:50 Equipment:@"铁桶" Weakness:@"铁通掉了"];
// [tiezom sayHi];
////使用便利构造器创建对象
// Zombie *zom=[Zombie zombieWithBlood:100 Attack:20 Speed:10];
// [zom attack];
////c语言中如果针对空指针进行操作,比如赋值,系统运行到这句代码马上崩溃,而OC遇到空指针会把这句代码当成一句废话,会执行不会有任何结果.
Person *per=[[Person alloc] initWithSetName:@"安逸臣" Sex:@"男" Age:27];
[per sayHi];
Person *per1=[Person personWithName:@"文世倾" Sex:@"男" Age:28];
[per1 sayHi];
[per walk];
[per1 eat];
return0;
}
/////////////////////////Zombie类///////////////////////////
(1)
//
// Zombie.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
//特征
{ NSInteger _blood;
NSInteger _attack;
CGFloat _speed;
}
//行为
-(void)sayHi;
-(void)walk;
-(void)attack;
-(void)dead;
//自定义初始化声明(对僵尸特征的初始化)
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed;
////便利构造器.
+(Zombie *)zombieWithBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed;
@end
(2)
//
// Zombie.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import "Zombie.h"
@implementation Zombie
-(void)sayHi{
NSLog(@"血量:%ld,攻击力:%ld,速度:%g",_blood,_attack,_speed);
}
-(void)walk{
NSLog(@"普通僵尸正在行走");
}
-(void)attack{
NSLog(@"普通僵尸正在攻击");
}
-(void)dead{
NSLog(@"普通僵尸正在死亡");
}
//完整版的初始化方法
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed{
//先调用父类初始化方法,对父类继承过来的成员变量进行设置
self=[super init];
//当这个对象在初始化过程中出现问题,会返回空指针,如果是空指针接下来的赋值就没有一点意义,跳过去,如果返回的是一个正常的堆空间地址,才继续赋值
if (self) {
_blood=blood;
_attack=attack;
_speed=speed;
}
return self;
}
////便利构造器.(创建对象);
//类方法,便利构造器把创建的对象的过程放到了程序里的.m文件中,这样通过类,直接就能创建一个对象出来
//系统类提供了很多便利构造器的方法.
+(Zombie *)zombieWithBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed{
Zombie *zombie=[[Zombie alloc] initWithSetBlood:blood Attack:attack Speed:speed];
return zombie;
}
@end
////////////////////LuZhangZombie////////////////////////////////
(1)
//
// LuZhangZombie.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Zombie.h"
@interface LuZhangZombie : Zombie
//特征
{
//子类只需要写自己特有的特征就可以,其余的特征都会继承.
NSString *_equipment;
}
//行为
//对方法的重写
//-(void)walk;////此处可以不声明,因为父类已声明过
//-(void)attack;
//-(void)dead;
-(void)sayHi;
-(void)loseEquipment;
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed
Equipment:(NSString *)equipment;
@end
(2)
//
// LuZhangZombie.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import "LuZhangZombie.h"
@implementation LuZhangZombie
-(void)sayHi{
NSLog(@"血量:%ld,攻击力:%ld,速度:%g,装备:%@",_blood,_attack,_speed,_equipment);
}
-(void)walk{
///子类重新定义僵尸的方法,否则向上寻找父类方法
NSLog(@"路障僵尸正在走来");
}
-(void)attack{
NSLog(@"路障僵尸正在攻击");
}
-(void)dead{
NSLog(@"路障僵尸正在死亡");
}
-(void)loseEquipment{
_speed=100;
NSLog(@"路障僵尸失去了装备");
}
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed
Equipment:(NSString *)equipment{
//继承父类,先对父类进行赋值
self=[super initWithSetBlood:blood Attack:attack Speed:speed];
if (self) {
_equipment=equipment;
}
return self;
}
@end
/////////////////////////TieTongZombie////////////////////////
(1)
//
// TieTongZombie.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import "LuZhangZombie.h"
@interface TieTongZombie : LuZhangZombie
{
NSString *_weakness;
}
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed
Equipment:(NSString *)equipment
Weakness:(NSString *)weakness;
@end
(2)
//
// TieTongZombie.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import "TieTongZombie.h"
@implementation TieTongZombie
-(void)sayHi{
NSLog(@"血量:%ld,攻击力:%ld,速度:%g,装备:%@,弱点:%@",_blood,_attack,_speed,_equipment,_weakness);
}
-(void)walk{
[super walk];////super寻找继承过来的方法,并执行该方法,只能执行自己父类,
////方法重新定义,优先执行子类定义,如果子类没有重新定义方法,则向上继承父类定义的方法
NSLog(@"铁桶僵尸正在走来");
}
-(void)attack{
NSLog(@"铁桶僵尸正在攻击");
}
-(void)dead{
NSLog(@"铁桶僵尸正在死亡");
}
-(void)loseEquipment{
NSLog(@"铁桶僵尸失去了装备");
}
-(id)initWithSetBlood:(NSInteger)blood
Attack:(NSInteger)attack
Speed:(CGFloat)speed
Equipment:(NSString *)equipment
Weakness:(NSString *)weakness{
self=[super initWithSetBlood:blood Attack:attack Speed:speed Equipment:equipment];
if (self) {
_weakness=weakness;
}
return self;
}
@end
//////////////////////////person类///////////////////////////////
(1)
//
// Person.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/17.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
//三个成员变量
{
NSString *_name;
NSString *_sex;
NSInteger _age;
}
-(void)eat;
-(void)walk;
//sayHi方法
-(void)sayHi;
//设置器
-(void)setName:(NSString *)name;
-(void)setSex:(NSString *)sex;
-(void)setAge:(NSInteger)age;
//访问器
-(NSString *)name;
-(NSString *)sex;
-(NSInteger)age;
//自定义初始化方法
-(id)initWithSetName:(NSString *)name
Sex:(NSString *)sex
Age:(NSInteger)age;
//便利构造器
+(Person *)personWithName:(NSString *)name////(Person *)或(init);
Sex:(NSString *)sex
Age:(NSInteger)age;
@end
(2)
//
// Person.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/17.
// Copyright (c) 2015年 flg. All rights reserved.
//
#import "Person.h"
@implementation Person
-(void)eat{
NSLog(@"吃");
}
-(void)walk{
NSLog(@"行走");
}
//sayHi方法
-(void)sayHi{
NSLog(@"姓名:%@,性别:%@,年龄:%ld",_name,_sex,_age);
}
//设置器
-(void)setName:(NSString *)name{
_name=name;
}
-(void)setSex:(NSString *)sex{
_sex=sex;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
//访问器
-(NSString *)name{
return _name;
}
-(NSString *)sex{
return _sex;
}
-(NSInteger)age{
return _age;
}
//自定义初始化方法
-(id)initWithSetName:(NSString *)name
Sex:(NSString *)sex
Age:(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_sex=sex;
_age=age;
}
return self;
}
//便利构造器
+(Person *)personWithName:(NSString *)name////(Person *)或(init);
Sex:(NSString *)sex
Age:(NSInteger)age{
Person *per=[[Person alloc] initWithSetName:name Sex:sex Age:age];
return per;
}
@end
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- 【继承】指定初始化方法【便利构造器】
- 03 继承 初始化方法 便利构造器
- 继承 初始化方法 便利构造器
- OCday3 初始化方法, 便利构造器, 继承
- day3: 继承、初始化方法、便利构造器
- 继承 初始化方法 便利构造器
- [TwistedFate]继承 初始化方法 便利构造器
- 继承、初始化方法、便利构造器
- OC之继承,初始化方法,便利构造器
- OC_03_初始化方法_便利构造器_继承
- OC基础:继承.初始化方法,便利构造器
- OC-继承-初始化方法-便利构造器(练习题-打僵尸)
- OC学习-继承,便利构造器,初始化方法
- 习题1-2 温度(temperature)
- Python3 支持 MySQL
- 2015年7月16号
- 如何跟踪Entity Framework生成的SQL!
- Hibernate初认识以及HelloWorld
- OC_继承,便利构造器,初始化方法
- USACO Name That Number(File)
- 习题1-3 连续和(sum)
- Codeforces Round #275 (Div. 2) C. Diverse Permutation 构造
- mysql Innodb缓存命中率
- 股票学习03(挂单)
- 一种用于高清下变换的基函数
- Android Configuration横竖屏切换时Activity生命周期调用
- OpenGl_ES 使用流程