OC之继承与便利构造器

作者: 李小六_ | 来源:发表于2015-05-08 21:50 被阅读1200次
1. 继承

继承注意事项

  1. 子类继承父类所有变量和方法;
  2. 继承是单向的, 子类所有成员变量和方法
  3. 没有父类的类称为根类, OC中的根类为NSObject
  4. 如果子类不满意父类的方法的实现, 可以重写父类方法
    // 注意: 当某一类的定义的对象调用方法的时候, 会在自己类的.m文件中查找, 要是没有则回到父类的方法中查找, 若找到, 则执行自己的方法
  • 建立student文件的时候, 继承于Person, Student的 .h文件 会显示继承与Person;

    @interface Student : Person // student 是子类, Person是父类, (子类和父类是相对的) @end

若是新建的新类, 都继承于NSObject
@interface Person : NSObject @end

2. 初始化方法

关键词 super 是编译器指令, 并非对象
作用: 给super发消息, 可执行父类中实现的方法
子类可以重写父类的方法, 即: 子类既有自己的实现, 又有父类继承下来的实现, 如果想使用父类的实现, 向super发送消息.
super用法! 例如还拿Person类举例, 其中有info方法
- (void)info {
NSLog(@"%@, %@, %u", _name, _sex, _age);
}
Student 类继承与Person 其中的info方法
- (void) info{
NSLog(@"name %@, age %lu, sex %@, school:%@, number: %lu ", _name, _age, _sex, _school, _number);
[super info]; // 执行到这的时候, 会执行父类的info方法, 相当于同时执行了父类的info了子类的info方法
NSLog(@"school: %@", number: %@", _school, _number);
}

当子类执行info 方法的时候,会相应执行父类info方法!


3.初始化

初始化的主要作用是: 为某些实例变量赋初始值!
初始化方法子啊对象的整个生命周期只使用一次;
- (id)init{
self = [super init]; // 给父类发送init消息, 即执行父类中实现的init方法;
if (self) {
// 初始化设置
}
return self;
}
例如: 定义一个Person类
.h文件
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;
.m文件中实现
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
{ self = [super init]; // 调用父类中init方法, 即 NSObject中得init方法;
if(self){
[self setName:name]; 或 // _name = name;
[self setAge:age]; 或 // _sex = sex;
[self setSex:sex]; 或 // _age = age;
}
return self;
}
若建立一个类Student作为Person的子类, 则Student的初始化方法为
Student的 .h 文件

 @interface Student : Person
 {
NSString *_school;
NSInteger _number;
 }
- (id)initWithName:(NSString *)name
               sex:(NSString *)sex
               age:(NSInteger)age
            school:(NSString *)school
            number:(NSInteger)number;
@end

Student 中的.m文件
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
school:(NSString *)school
number:(NSInteger)number
{
self = [super initWithName:name sex:sex age:age];
if (self) {
[self setSchool: school];
[self setNumber: number];
}
return self
}

self = [super initWithName:name sex:sex age:age]; 从父类那里继承初始化方法, 对name, sex, age赋值!

使用初始化方法
Student *S1 =[[Student alloc] initWithName: @"zhangsan" sex:@"man" age:12 school:@"yizhong" number:12 ]; // 直接赋值完成


4. 便利构造器

遍历构造器在初始化方法的基础上那个前进了一步, 封装了对象, 创建过程, 内部实现: 封装alloc 和初始化方法, 使用更加简洁.
如: 上边的Student类 的便利构造器如下:
.h 文件的声明
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
school:(NSString *)school
number:(NSInteger)number; // 需要对所有你要赋值的对象使用;
.m文件中方法的实现
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
school:(NSString *)school
number:(NSInteger)number
{
Student *stu = [[Student alloc] initWithName:name sex:sex age:age school:school number:number];
// 把初始化方法的封装了起来 所以, 要用便利构造器, 之前得写好初始化方法
return stu;
}

使用:

Student *S1 =  [ Student studentWithName: @"zhangsan" sex:@"man" age:12 school:@"一中"  number:20]; 
 赋值完毕; 少了alloc那步骤; 

相关文章

  • OC之继承与便利构造器

    1. 继承 继承注意事项 子类继承父类所有变量和方法; 继承是单向的, 子类所有成员变量和方法 没有父类的类称为根...

  • Swift-类和对象

    枚举类型 便利构造器 便利构造器 类的继承 类的重写-override optional--可选型 extensi...

  • 构造器知识点

    为什么要有构造器:为类中自身和继承来的存储属性赋初值。一、两种构造器-指定构造器和便利构造器指定构造器:类中必备的...

  • Swift中如何使用便利构造器

    使用OC开发的时候我们经常会使用便利构造器,初始化时很方便,那么在swift中我们如何使用便利构造器呢,小编就告诉...

  • iOS开发 - 「Swift 学习」Swift的构造过程(四)

    类的继承和构造过程 Swift 提供指定构造器、便利构造器两种类型的类构造器来确保所有类实例中存储型属性都能获得初...

  • scala-继承与特质

    继承与特质 继承 继承的概念 使用extends关键字: 构造器的执行顺序 Scala在继承的时候构造器的执行顺序...

  • Swift 定义枚举类

    添加构造器 便利构造器

  • 便利初始化/便利构造器

    //便利初始化函数。便利构造器。 //Objective-C是C 的超集//包含C,OC增加了面向对象的特性

  • Objective_C_初始化方法

    一、继承 二、super self三、初始化方法四、指定初始化方法五、便利构造器 继承: 一、setter、ge...

  • swift 构造器

    构造器 使用构造器来实现构造过程,构造器可以看做是用来创建新实例的特殊方法,与OC的构造器不同,之前是先调用父类的...

网友评论

    本文标题:OC之继承与便利构造器

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