zoukankan      html  css  js  c++  java
  • 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.
    循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
    最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。

  • 相关阅读:
    DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)
    IT人生知识分享:博弈论的理性思维
    IT人生知识分享:概率与运气
    开源:秋式广告杀手源码
    浅说秋色园域名被国家互联网应急中心封与解的过程
    自定义可视化调试工具(Microsoft.VisualStudio.DebuggerVisualizers)
    Excel导入导出的业务进化场景及组件化的设计方案(上)
    回忆录:30岁那年,你成长了吗?(上篇)
    Excel导入导出组件的设计
    DBImport v3.3 中文版发布:数据库数据互导及文档生成工具(IT人员必备)
  • 原文地址:https://www.cnblogs.com/lxllanou/p/3621227.html
Copyright © 2011-2022 走看看