1.子类中存在父类的方法吗?继承等于把父类中的方法复制到子类中吗?求解
2.在初始化时,if(self = [super init]){.....};判定语句究竟起到了什么作用?

解决方案 »

  1.   

    1. 继承是面向对象编程中的一个重要特性,子类可以继承父类的方法及属性。子类继承父类的方法,并不是你说的会复制到子类中去。在子类中你可以通过关键字super 来调用父类的方法。用子类的实例可以访问父类中的方法,如果在子类中存在与父类同名的方法,实例调用的是子类的方法,但在子类中,你可以覆写(override)父类的方法。如我们在viewcontroller 中,经常看到这样的代码
    ///////子类覆写父类的viewdidload方法
    -(void)viewDidLoad {
    /////// 先调用的父类的viewdidload, 在vc中uiviewcontroller基类默认封装了一些实现,我们需要这些操作,所以需要调用基类的viewdidload.如果某些情况下你不需要父类的实现,也完全可以不调用父类的方法。
          [super viewDidLoad];  
    }2. 总结起来应该有3点
    <1> 完成自身及父类初始化,保存引用计数
    <2> 要知道,内存中self寻址是按照固定距离去寻址,self= [super init]可以使这个距离保持正确。
    <3> 安全捕获返回nil的情况
      

  2.   

    1、建议去看下面向对象的相关概念(比如构造函数、继承、封装、重载等)。
    2、建议去看下指针相关的文档(比如堆栈、引用等)1、子类的确具有父类的所有方法和属性的,但是子类一般还有自己独有的方法和属性。如果子类的方法和属性和父类一样,那么调用方法或属性时,只会调用子类的方法或属性,而不会调用父类的方法或者属性(但是子类覆盖父类的方法和属性时,可以通过super调用父类的方法和属性,然后额外添加自己的操作或属性)
    2、self= [super init],对象初始化,即向系统申请内存空间,如果系统返回nil,表示申请内存空间失败,否则,会返回该对象的指针。
      

  3.   

    正确初始化约束:1.方法名称以init开头,惯例
    2.返回一个可用对象
    3.调用了父类初始化的init方法,将返回值赋给self,检查self
    **(如父类返回nil,则子类也直接返回nil,不需调用release,此时父类已经调用了release)
    4.处理构造过程中的错误,返回nil前需调用release@implementation Point2D
    -(id) initWithXY :(int)x :(int)y { //1.方法名称以init开头,惯例
    //4.处理构造过程中的错误,返回nil前需调用release
    if(x == 0) {
    [self release];
    //self = nil; //保险的话,将self赋nil
    return nil;
    }

    //3.调用了父类初始化的init方法,将返回值赋给self,检查self
    if(!(self = [super init])) //此时父类已经调用了release
    return nil;

    //赋值等初始化操作
    self->x = x;
    self->y = y;

    return self; //2.返回一个可用对象
    }
    @end
      

  4.   

    objective-c没有virtual关键字,所以它的所有函数都是virtual的.所以我认为楼主说的:
    "1.子类中存在父类的方法吗?继承等于把父类中的方法复制到子类中吗?求解"
    都是对的....