方法结构:

- / + (返回值类型)方法名;


- 号方法:使用对象调用 称为实例方法

+号方法:使用类调用 称为类方法


方法名判断:
1.去掉- / +
2.去掉返回值类型
3.去掉参数类型和参数名
4.去掉分号
剩下的所有的内容是方法名;


面向对象三大特征:封装,继承,多态;



//记录

.h

//方法的结构
//- 或者 + (返回值)方法名;
- (void)study;
+ (void) sleep;


//-号方法: 使用对象调用  称为实例方法
//+号方法: 使用类调用     称为类方法


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


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


//3.带多个参数
//- 或 + (返回值类型)方法名:(参数类型)参数名(空格)方法名:(参数类型)参数名;
- (void)kickAss:(NSString *)name withPeople:(NSString *)name2;


.m

-(返回值类型)方法名

{

//实例方法中,可以使用类的实例变量

}


+(返回值类型)方法名

{

//在类的方法中,不可以使用实例变量
}


//1.只能有一个返回值
//2.返回值类型和返回的值的类型(int)/(NSString *)
- (NSString *)getName
{
   return  _name;
}

- (int)getAge
{
   return _age;
}


- (NSString *)kickAss:(NSString *)name people:(NSString *)name2
{
   //方法传入的参数(name,name2)只在方法内部可以使用,在其他方法或者main.m中都不可以调用
   //方法名不可以重复

NSLog(@"%@,%@",name,name2);

}


main.m

//-号方法的调用
       Student * stu = [[Student alloc] init];
       [stu study];                 //对象调用

//+号方法的调用
       [Student sleep];          //类调用

[stu kickAss:@"啊啊啊" withPeople:@"噢噢噢"];   //多参数



//继承

.h

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

.m

//初始化方法是一个实例方法,返回值为id(代表任何对象类型),方法名以init开头 只在初始化的时候调用一次
- (id)init   //id:代表任何对象
{
   //利用super关键字 调用父类的init方法 作用:用于初始化从父类继承过来的实例变量
   //利用self(代表自己类的一个对象) 接受super初始化好的对象
   self = [super init];  //self代表当前类的一个对象

   //如果上面初始化不成功,self就为nil(空)
   if (self) {

       //如果成功,在判断体中初始化自己的实例变量
      _name = @"龙龙君";
       _sex = @"公";
       _age = 22;
       _money = 100;
   }

   //返回初始化好的对象.
   return self;
}

main.m

Abc * abc = [[Abc alloc]initWithName:@"安" sex:@"女" age:10 money:100];


子类.h

@interface 子类名 : 父类名  //确定继承关系

//继承: 子类会继承父类所有的 实例变量 和 方法

//子类可以重写父类的方法

//可以在子类重写的方法中,调用父类的方法


子类.m

- (返回值类型)方法名

{

[super 方法名];       //调用父类的方法刷卡  super关键字只有一个作用,用于子类中调用父类的方法

}

//对父类的方法进行重写
//子类的方法优先级最高


子类main.m

Abc2 * abc2 = [[Abc2 alloc] init];
      abc2->_name = @"呵呵";
      [子类名 方法名];


//作业

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

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



main.m


#import "Zombie.h"
#import "Luzhang.h"
#import "Tietong.h"
int main(int argc, const char * argv[])
{
   Zombie * zombie = [[Zombie alloc] initWithKind:@"普通僵尸" hp:50 lostHp:3];
   while (zombie->_currentHp > 0) {
       [zombie lostHpMethod];
   }

   Luzhang * luzhang = [[Luzhang alloc] initWithKind:@"路障僵尸" hp:80 lostHp:2
                                           equipment:@"路障盔甲" weakness:@"丢帽子"];
   while (luzhang->_currentHp > 0) {
       [luzhang lostHpMethod];
   }

   Tietong * tietong =[[Tietong alloc]initWithKind:@"铁桶僵尸" hp:120 lostHp:1 equipment:@"桶子" weakness:@"小招"];

   while (tietong->_currentHp > 0) {
       [tietong lostHpMethod];
   }
   return 0;
}



Zombie.h


@interface Zombie : NSObject
{
   @public
   NSString * _kind;  //种类
   int _hp;
   int _losthp;
   int _currentHp;  //当前剩余的血量
}

- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp;

- (void) lostHpMethod; //被打击失血

- (void) dead;   //死亡
@end



Zombie.m


@implementation Zombie

- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp
{
   self = [super init];
   if (self) {
       _kind = kind;
       _hp = hp;
       _losthp = lostHp;
       _currentHp = _hp;
   }
   return self;
}

- (void) lostHpMethod   //被打击失血
{
   _currentHp -= _losthp;   //当前剩余血量 = 当前剩余血量 - 失血量
   if (_currentHp <= 0) {
       _currentHp = 0;

       NSLog(@"打掉%d血,还有%d血",_losthp,_currentHp);
       [self dead];  //self用来调用自己类中的其它方法
   }
   else
   {
       //如果没死,输出血量
       NSLog(@"打掉%d血,还有%d血",_losthp,_currentHp);
   }
}

- (void) dead
{
   NSLog(@"%@GAME OVER",_kind);
}
@end



Luzhang.h


#import "Zombie.h"

@interface Luzhang : Zombie
{
   NSString * _equipment;  //道具
   NSString * _weakness;  //弱点
}

- (id)initWithKind:(NSString *)kind hp:(int)hp
           lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(NSString *)weakness;

- (void)lostEquipment;
@end



Luzhang.m


#import "Luzhang.h"

@implementation Luzhang


- (id)initWithKind:(NSString *)kind hp:(int)hp
           lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(NSString *)weakness
{
   self = [super initWithKind:kind hp:hp lostHp:lostHp];
   if (self) {
       _equipment = equipment;
       _weakness = weakness;
   }
   return self;
}


- (void)lostEquipment
{
   _losthp = 3;//装备丢失,每次掉血量增加
   NSLog(@"%@的%@丢了",_kind,_equipment);
   _equipment = nil;//把装备扔掉
}

//重写掉血的方法
- (void)lostHpMethod
{
   if (_equipment != nil && _currentHp <= _hp/2 ) {
       [self lostEquipment];
   }
   [super lostHpMethod];
}
@end



//需求和方法和路障僵尸一样,所以直接在main.m调用即可
Tietong.h

Tietong.m