关于《objective-c程序设计》478页 Calculator的初始化方法(即子类初始化方法)

来源:互联网 发布:cname解析 域名后加点 编辑:程序博客网 时间:2024/05/18 22:16
-(id)     init
{
     self = [super init]
     if (self) {
          operand1 = [[Fraction alloc] init];
          operand2 = [[Fraction alloc] init];
          accumulator = [[Fraction alloc] init];
     }

     return self;
}

首先,为什么要覆写从NSObject继承来的init方法?因为不覆写直接用父类的init方法初始化时,无法初始化Calculator类中的三个实例变量(因为这三个实例变量也是引用类型,同样需要初始化),所以要在一个方法中同时完成Calculator自身及其包含的引用类型的初始化。

关于self = [super init];   1、为什么要对父类初始化? 2、为什么可以这么赋值?
1、“初始化“实际是对自身包含的数据成员进行初始化,父类的初始化方法必然是可以初始化父类所包含的数据成员,因为子类的数据成员范围大于父类,所以先确保父类被初始化了再初始化子类中的数据成员;
2、因为子类的实例名(指针)可以引用(指向)父类的实例(指针所指向的内容)

都是自己揣测的,欢迎拍砖

对了,还有一点不明,为啥返回的是id类型呢?为啥不是 Calculator * 呢?
原创粉丝点击