ios学习记录 day17 OC 2

1.OC的方法:声明

- (返回值) 方法名;//使用对象去调用  实例方法

+(返回值) 方法名;//使用类调用      类方法

2.继承:super关键字的作用只有一个:用于子类中调用父类的方法

3.特殊方法:初始化方法

Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
    NSString * _name;
    NSString * _sex;
    int _age;
}
//方法列表
//方法结构  -/+ (返回值) 方法名;
- (void) study;

//-号方法:使用对象去调用  实例方法
//+号方法:使用类调用      类方法
+ (void) sleep;

//1.带返回值的方法
- (NSString *) getName;

- (NSString *) getSex;

- (int) getAge;

//2.带参数的方法
// -/+(返回值类型)方法名:(参数类型)参数名;
- (void) eat:(NSString *)food;//一个参数
- (void) fight:(NSString *)people;
- (void) black:(NSString *)name;

//3.带多个参数
//-/+ (返回值类型)方法名:(参数类型)参数名 方法名:(参数类型)参数名;
//参数名不能一样 重复定义
- (void) kickAss:(NSString *)name1 withPeople:(NSString *)name2;

- (NSString *) play:(NSString *)name1 withPeople:(NSString *)name2;


Student.m
#import "Student.h"
@implementation Student
-(void)study{
    //实例方法中,可以使用类的实例变量
    NSLog(@"%@",_name);
}

+(void)sleep{
    //类方法中,不可以用实例变量
    
}

//带返回值的方法实现 用return
//1.只能有一个返回值
//2.返回值类型和返回的值得类型 (int)/(NSString *)
-(NSString *)getName{
    return _name;
}
-(NSString *)getSex{
    return _sex;
}
-(int)getAge{
    return _age;
}

-(void)eat:(NSString *)food{
    NSLog(@"吃%@",food);
}

-(void)fight:(NSString *)people{
    NSLog(@"干%@",people);
}

-(void)black:(NSString *)name{
    NSLog(@"开始黑%@",name);
}


-(void)kickAss:(NSString *)name1 withPeople:(NSString *)name2{
    NSLog(@"中仁兄和%@一起打%@",name2,name1);
}

- (NSString *)play:(NSString *)name1 withPeople:(NSString *)name2{
    //方法名不能重复 play:withPeople:
    //方法名的判断:1.去掉-/+ 2.去掉返回值类型 3.去掉参数类型和参数名 4.去掉分号
    //剩下的所有内容都是方法名.(不能少了:)
    
    
    //方法传入的参数(name1,name2)只在方法内部可以使用,在其他方法或者main.m中都不可以调用
    NSLog(@"我和%@一起玩%@",name2,name1);
    return name2;
}

@end

main.m

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
    //-号方法的调用
    Student * stu = [[Student alloc] init];
//    [stu study];
//    [stu getName];
//    //+号方法的调用
//    [Student sleep];
//    
//    //[stu eat:@"鸡蛋"];
//    NSString * a = @"鸡蛋";
//    [stu eat:a];
//    
//    [stu fight:@"深情君"];
//    [stu black:@"中仁"];
//    
//    [stu kickAss:@"深情君" withPeople:@"大龙"];
    
    
   NSString * b = [stu play:@"撸啊撸" withPeople:@"赵云龙"];
    
    NSLog(@"%@坑死了",b);
    
    return 0;
}

类的继承:面向对象三大特征(封装 继承 多态)

继承:

1.什么是继承:把类细分 后面分出来的子类 继承了父类

2.怎么判断继承(is - a):

A is-a B;如果正确,A就是B的子类

特殊的方法(类的初始化方法)

RichMan.h

#import <Foundation/Foundation.h>
@interface RichMan : NSObject
{
    @public
    NSString * _name;
    NSString * _sex;
    int _age;
    float _money;
}

- (void) charge;//刷卡
- (void) sayHi;//泡妹子

- (id)initWithName:(NSString *)name WithSex:(NSString *)sex WithAge:(int)age WithMoney:(float)money;

@end

 

RichMan.m

#import "RichMan.h"

@implementation RichMan
- (void)charge{
    NSLog(@"刷卡");
}
- (void)sayHi{
    NSLog(@"我叫%@",_name);
}


//特殊的方法
//初始化方法是一个实例方法(-号),返回值为id(代表任何对象类型),方法名以init开头 只在初始化的时候调用一次
- (id)init//id 代表任何对象
{
    //利用super关键字 调用父类的init方法 作用:用于初始化从父类继承过来的实例变量
    //利用self(代表自己类的一个对象) 接受super初始化好的对象
    
    self = [super init];//self 当前类(RichMan)中的一个对象
    
        //如果初始化不成功 self 为 nil(空)
        if (self) {
            
        //如果成功 在判断体中初始化自己的实例变量
            _name = @"深情君";
            _sex = @"男";
            _age = 80;
            _money = 10;
            
    }//{}中初始化自己的实例变量
    //返回初始化好的对象

    return self;
}

- (id)initWithName:(NSString *)name WithSex:(NSString *)sex WithAge:(int)age WithMoney:(float)money{
    self = [super init];
    if (self) {
        _name = name;
        _sex = sex;
        _age = age;
        _money = money;
    }
    return self;
}
@end

 

Rich2nd.h

#import <Foundation/Foundation.h>
#import "RichMan.h"

@interface Rich2nd : RichMan//确定继承关系

//继承特性:子类会继承父类多有的 实例变量 和 方法
// 子类可以重写父类的方法
// 可以再子类重写的方法中,调用父类的方法

- (void) dragRacing;//飙车
@end

Rich2nd.m

#import "Rich2nd.h"

@implementation Rich2nd

- (void) charge{
    NSLog(@"刷老爸的卡");
    [super charge];//调用父类的方法刷卡 super关键字的作用只有一个:用于子类中调用父类的方法
}

//对父类的方法进行重写 子类的方法优先级最高
- (void) sayHi{
    NSLog(@"我叫%@,能交个朋友么",_name);
}
- (void) dragRacing{
    NSLog(@"飙车");
}
@end

main.m

#import <Foundation/Foundation.h>
#import "RichMan.h"
#import "Rich2nd.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
      
        RichMan * richman = [[RichMan alloc] init];
        [richman sayHi];
        [richman charge];
       // NSLog(@"富人%@",richman -> _name);
        
        Rich2nd * rich2nd = [[Rich2nd alloc] init];
        rich2nd -> _name = @"萌小小艺";
        [rich2nd sayHi];
        [rich2nd charge];
        [rich2nd dragRacing];
        
        RichMan * richman1 = [[RichMan alloc]initWithName:@"深情君" WithSex:@"男" WithAge:80 WithMoney:10.0];
        NSLog(@"%@,%@,%d,%.2f",richman1->_name,richman1->_sex,richman1->_age,richman1->_money);
    }
    return 0;
}

 

作业:

打僵尸。需求:
   定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
    定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
    定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。

For循环 模拟攻击,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。

posted @ 2014-03-24 16:53  lxl奋小斗  阅读(181)  评论(0编辑  收藏  举报