A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

继承


1.    继承的目的
     
     儿子类想拥有父亲类所有的成员,但是又不想自己去定义,而是想凭空拥有。


2.    继承的语法


   如何让1个类认另外1个类为爹,因为想拥有爹类中的所有的东西。
     语法:
          @interface 类名 : 父亲类的名称


          @end


3.    继承效果


    儿子类一旦从父亲类去继承,那么儿子类中就拥有了父亲类中的所有成员。



4.    几个术语


     @interface Student : Person
     1)Student类从Person类继承,Student类是Person类的子类,Person类是Student类的父类!
     2)Student类从Person类派生,Student类是Person类的派生类,Person类是Student类的基类!


5.    使用继承的注意与满足继承的关系


     1)在新创建类模块的时候,指定父类
          Xcode就会自动的帮助,完成一些列的事情。
     2)继承是类在继承,而不是对象在继承。
          子类从父类继承,子类中就拥有了父类中定义的所有的成员,只是类继承。
          我们创建对象,对象与对象之间是毫无关系的。
     3)什么时候应该使用继承?
          如果发现另外1个类中成员我也想有,那么这个时候就可以使用继承。
          但千万不能乱继承!为了继承而继承!



     凡是满足 is a 关系的类  就可以用继承的关系
     即当A类是1个B类的时候,那么A类就可以从B类继承,
     例:
     学生   ->     人
     电风扇     ->     电器
     汽车     ->     交通工具
     
     学生     ->     狗     (就是乱继承!)
     4)如果有1个成员不是所有的子类都拥有的,那么这个成员就不应该定义在父类当中。因为一旦定义在父类当中,那么所有的子类全都有了。
          父类中只定义所有的子类都拥有的。只要不是所有的子类都拥有的,那么就不应该定义在父类当中。


6.    继承的特点


     1)单根性
          1个类有且只能有1个父类。
          1个类不能有多个父类!
     2)传递性
          A类从B类继承,B类又从C类继承。
          那么A类就同时拥有B、C类的成员!



7.    NSObject 类。
     
     是Foundation框架中的类,在这个类中有1个方法new,这个方法是用来创建对象的。方法的返回值是创建的这个对象的指针。
     也就是说,如果要创建类的对象,就必须要调用这个new方法。
     如果我们想要让我们的类具备创建对象的能力,就必须要让我们的类直接的或者间接的从NSObject类继承!
     如果不去从NSObject类中继承,那么你创建的这个类就无法创建对象,也就没有任何意义了。
     在NSObject类之中,还定义了1个属性,这个属性叫做isa指针。所以,每1个子类对象中都有一个叫做isa的指针。


     所以说,NSObject类是OC中所有类的祖宗类,因为OC中的类全部都是直接的或者间接从它那继承。


8.    子类中不能存在和父类同名的属性


     因为子类从父类继承,就意味着子类拥有了父类所有的成员,包括属性和方法。
     也就相当于子类中其实已经定义了。
     如果子类再定义1个同名的属性,很明显就冲突了。



9.    super关键字


     1)可以用在类方法和对象方法之中。
     2)在对象方法中可以使用super关键字调用当前对象从父类继承过来的对象方法。
     3)在类方法中可以使用super关键字调用当前类从父类继承过来的类方法。
          a.     类方法也能被子类继承,所以,父类中的类方法,可以使用父类名来调用,也可以用子类名来调用。
          b.     在子类的类方法中,可以使用super关键字调用父类的类方法。
     4)super只能用来调用父类的对象方法或者类方法。不能用来访问属性!


10.    子类从父类继承


     1)相当于,子类模板当中,拥有了父类模板中所有成员。
     2)创建1个子类对象,仍然是根据子类的模板来创建对象。只不过子类模板拥有父类模板中的成员。
          所以,子类对象中既有子类的成员也有父类的成员。
     3)super特指这个方法是从父类继承过来的!
          super是指当前类或者对象的这个方法是从父类继承过来的。

          所以当我们去调用的是父类的对象方法或者类方法的时候,建议去用super,而不用self!




11.    访问修饰符


     用来修饰属性,可以限定对象的属性在哪一段访问。



     1)4个访问修饰符

     a.     @private:私有的。
          被@private修饰的属性,只能在本类的内部访问,也就是说只能在本类的方法的实现中访问。

     b.     @protected:受保护的。
          被@protected修饰的属性,只能在本类和本类的子类中访问,也就是说只能在本类和子类的方法的实现中访问。
     c.     @package:
          被@package修饰的属性,可以在当前框架中访问。
     d.     @public:公共的。
          被@public修饰的属性,可以在任意的地方访问。


     2)如果不为属性指定访问修饰符,那么默认的就是@protected。


     3)如果父类的属性被@private修饰,子类仍然可以继承父类的私有属性,只不过,在子类当中无法直接访问从父类继承过来的私有属性。
          但是如果父类中有1个方法在为属性赋值或者取值,那么子类可以调用这个方法间接的访问父类的私有属性。



     4)访问修饰符的作用域
          从写访问修饰符的地方开始往下,直到遇到另外一个访问修饰符或者结束大括弧为止。中间的所有的属性都应用这个访问修饰符。


     5)使用建议:
          a.     @public 无论什么情况下都不要使用。属性不要直接暴露给外界。
          b.     @private 如果属性只想在本类中使用,不想在子类中使用,那么就使用它。
          c.     @protected 如果你希望属性只在本类和本类的子类中使用。那么就用它。
               推荐使用默认的@protected!
     
     6)访问修饰符只能用来修饰属性,不能用来修饰方法。

5 个回复

倒序浏览
楼主帖子发的真及时,我们今天刚好学继承
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
LXD2016 发表于 2016-10-6 13:03
楼主帖子发的真及时,我们今天刚好学继承

加油 。我们基础班再有两天结束。
回复 使用道具 举报
梦里花落知多少s 发表于 2016-10-7 11:52
加油 。我们基础班再有两天结束。

还有两天就结束了啊,感觉后面难不难,我加你好友了,到时候问问你点招考什么
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
LXD2016 发表于 2016-10-7 12:24
还有两天就结束了啊,感觉后面难不难,我加你好友了,到时候问问你点招考什么
...

多敲多练多想。都没有那么难。知识点理解来记,代码多敲。ios是没什么大问题的。
回复 使用道具 举报
可以,挺全面的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马