美文网首页
OClesson03

OClesson03

作者: fanaf | 来源:发表于2015-11-05 22:02 被阅读4次

    lesson3

    include是c中导入头文件的指令, #import是oc导入头文件的指令,但是#import可以自动检测是否产生了循环导入,如果有,则自动断开其中一条导入链路,而include本身并不具备这种检测、规避功能。

    @class:@class可以解决循环引入后,断开某条链路情况
    在声明文件中,使用@class将类名声明出来,并不导入该类 在实现文件中,使用#import导入类的头文件,这样不但可以避免循环导入,而且互相把对方类声明为自己的实例
    继承的特性:
    1.继承是单向的,不能相互继承,继承也是单点的 子类只有一个父类
    2、传递性:子类具备父类的所有实例变量和方法,并且能通过父类继承到父父类的实例变量和方法
    用代码实现继承
    在类的.h文件中@inteface后的冒号表示继承关系,冒号左边的类继承自冒号右边的类,没有特殊说明 一般是NSObject,所有类最终继承都是继承自该类
    创建一个person对象
    Person *p = [[Person alloc]initWithPerson:@"张三" withGender:@"男" withAge:25]; [p nslogPerson];
    如果子类重写了父类的方法,,那么将会执行子类的方法。
    Student *s = [[Student alloc]initWithPerson:@"马军" withGender:@"男" withAge:21];
    给子类特有的实例变量赋值
    [s setID:@"0021"]; [s setSchoolName:@"蓝鸥"]; [s nslogPerson];
    使用nslog方法打印一个对象时,会调用对象的description方法
    NSLog(@"%@",s);


    @interface Person : NSObject
    {
        NSString *_name;
        NSString *_gender;
        int _age;
    }
    - (void)setName: (NSString *)name;
    - (NSString *)name;
    - (void)setGender: (NSString *)gender;
    - (NSString *)gender;
    - (void)setAge: (int)age;
    - (int)age;
    - (id)initWithPerson: (NSString *)name
              withGender: (NSString *)gender
                 withAge: (int)age;//  自定义初始化
    

    方法 打印所有的实例变量
    继承自person类的子类,可以拥有父类的所有非私有的实例变量和方法
    - (void)nslogPerson;// 自定义输出函数


    @implementation Person
    - (void)setName: (NSString *)name{
        _name = name;
    }
    - (NSString *)name{
        return _name;
    }
    - (void)setGender : (NSString *)gender{
        _gender = gender;
    }
    - (NSString *)gender{
        return _gender;
    }
    - (void)setAge: (int)age{
        _age = age;
    }
    - (int)age{
        return _age;
    }
    - (id)initWithPerson: (NSString *)name withGender: (NSString *)gender withAge: (int)age{
        _name = name;
        _age = age;
        _gender = gender;
        return self;
    }
    - (void)nslogPerson{
        NSLog(@"姓名:%@ ,性别:%@ ,年龄:%d",_name,_gender,_age);
    }
    

    @interface Student : Person
    {
     子类可以拥有自己特有的实例变量和方法
        NSString *_schoolName;
        NSString *_ID;
    }
    - (void)setSchoolName: (NSString *)schoolName;
    - (NSString *) schoolName;
    - (void)setID : (NSString * )ID;
    - (NSString *)ID;
    

    @implementation Student
    重写父类的方法

    - (void)nslogPerson{
        NSLog(@"客官 你叫%@,你的性别%@,年龄是%d,学校名字:%@,学校ID:%@",_name,_gender,_age,_schoolName,_ID);
    }
    - (void)setSchoolName: (NSString *)schoolName{
        _schoolName = schoolName;
    }
    - (NSString *) schoolName{
        return _schoolName;
    }
    - (void)setID : (NSString * )ID{
        _ID = ID;
    }
    - (NSString *)ID{
        return _ID;
    }
    

    description 方法是系统提供的一中描述对象特征的一个实例方法,默认在打印一个对象时,会调用该方法,返回类名+对象地址,我们可以重写这个方法,将若干个实例变量拼接为一个字符串返回,这样就可以打印我们想要的信息
    - (NSString *)description{
    使用字符串类型,创建一个字符串对象,让后使用格式化初始化方法来将参数拼接进这个字符串的对象中
    NSString *string = [[NSString alloc] initWithFormat:@"%@ %@ %@ %d %@",_name,_gender,_schoolName,_age,_ID ]; return string; }

    相关文章

      网友评论

          本文标题:OClesson03

          本文链接:https://www.haomeiwen.com/subject/xxlchttx.html