zoukankan      html  css  js  c++  java
  • oc36--自定义构造方法在继承中的表现

    //
    //  Person.h
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property int age;
    @property NSString *name;
    
    /*
     自定义构造方法:
     其实就是自定义一个init方法
     1.一定是对象方法
     2.一定返回id/instancetype
     3.方法名称一定以init开头
    */
    - (instancetype)initWithAge:(int)age;
    
    //- (instancetype)initwithAge:(int)age;   // 注意: 自定义构造方法中的init后面的With的W一定要大写
    
    // 一个类可以有0个或者多个自定义构造方法
    - (instancetype)initWithName:(NSString *)name;
    
    // 自定义构造方法可以有1个或多个参数
    - (instancetype)initWithAge:(int)age andName:(NSString *)name;
    @end
    //
    //  Person.m
    
    #import "Person.h"
    
    @implementation Person
    
    - (instancetype)init
    {
        if (self = [super init]) {
            _age = 10;
        }
        return self;
    }
    
    - (NSString *)description
    {
        return [NSString stringWithFormat:@"age = %i, name = %@", _age, _name];
    }
    
    - (instancetype)initWithAge:(int)age
    // 注意: 自定义构造方法中的init后面的With的W一定要大写
    //- (instancetype)initwithAge:(int)age
    {
        if (self = [super init]) {
            _age = age;
        }
        return self;
    }
    
    - (instancetype)initWithName:(NSString *)name
    {
        if (self  =[super init]) {
            _name = name;
        }
        return self;
    }
    
    - (instancetype)initWithAge:(int)age andName:(NSString *)name
    {
        if (self = [super init]) {
            _age = age;
            _name = name;
        }
        return self;
    }
    @end
    //
    //  Student.h
    
    #import "Person.h"
    
    @interface Student : Person
    
    @property int no; // 学号
    
    - (instancetype)initWithAge:(int)age andName:(NSString *)name andNo:(int)no;
    @end
    //
    //  Student.m
    //  day14
    
    #import "Student.h"
    
    @implementation Student
    
    - (instancetype)initWithAge:(int)age andName:(NSString *)name andNo:(int)no
    {
        /*
        if (self = [super init]) {
    //        _age = age;
            // 狗拿耗子, 多管闲事
            // 自己的事情自己做
            [self setAge:age];
            [self setName:name];
        }
         */
        if (self = [super initWithAge:age andName:name]) {
            _no = no;
        }
        return self;
    }
    
    - (NSString *)description
    {
        return [NSString stringWithFormat:@"age = %i, name = %@, no = %i", [self age], [self name], _no];  //父类的属性是私有的。
    }
    @end
    //
    //  main.m
    //  自定义构造方法在继承中的表现
    
    #import <Foundation/Foundation.h>
    #import "Student.h"
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
    //    Student *stu = [[Student alloc] initWithAge:30 andName:@"lnj"];
        Student *stu = [[Student alloc] initWithAge:30 andName:@"lnj" andNo:888];
        NSLog(@"%@", stu);
        return 0;
    }
  • 相关阅读:
    LINQ to SQL 运行时动态构建查询条件
    MVC ViewData和ViewBag
    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作
    php表单中如何获取单选按钮与复选按钮的值
    [moka同学摘录]Yii2.0开发初学者必看
    Yii路径总结
    css样式reset
    ajax onblur 用法
    jquery自定义插件——window的实现
    jQuery使用ajaxStart()和ajaxStop()方法
  • 原文地址:https://www.cnblogs.com/yaowen/p/7417396.html
Copyright © 2011-2022 走看看