一、基本用法

  1.设计两个类Bird、Dog

  1. 1 // Bird的声明
  2. 2 @interface Bird : NSObject
  3. 3 {
  4. 4 @public
  5. 5 int weight;
  6. 6 }
  7. 7 - (void)eat;
  8. 8 @end
  9. 9 // Bird的定义
  10. 10 @implementation Bird
  11. 11 - (void)eat {
  12. 12 NSLog(@"吃吃吃-体重:%d", weight);
  13. 13 }
  14. 14 @end
  15. 15 // Dog的声明
  16. 16 @interface Dog : NSObject
  17. 17 {
  18. 18 @public
  19. 19 int weight;
  20. 20 }
  21. 21 - (void)eat;
  22. 22 @end
  23. 23 // Dog的定义
  24. 24 @implementation Dog
  25. 25 - (void)eat {
  26. 26 NSLog(@"吃吃吃-体重:%d", weight);
  27. 27 }
  28. 28 @end

  2.有相同的属性和行为,抽出一个父类Animal(先抽取weight属性,再抽取eat方法)

  1. 1 // Animal的声明
  2. 2 @interface Animal : NSObject
  3. 3 {
  4. 4 @public
  5. 5 int weight;
  6. 6 }
  7. 7 - (void)eat;
  8. 8 @end
  9. 9 // Animal的定义
  10. 10 @implementation Animal
  11. 11 - (void)eat {
  12. 12 NSLog(@"吃吃吃-体重:%d", weight);
  13. 13 }
  14. 14 @end

  3.子类在父类的基础上拓充属性和方法

  1. 1 // Bird的声明
  2. 2 @interface Bird : Animal
  3. 3 {
  4. 4 @public
  5. 5 int height;
  6. 6 }
  7. 7 - (void)fly;
  8. 8 @end
  9. 9
  10. 10 // Bird的定义
  11. 11 @implementation Bird
  12. 12 - (void)fly {
  13. 13 NSLog(@"飞飞飞-高度:%d", height);
  14. 14 }
  15. 15 @end
  16. 16
  17. 17 // Dog的声明
  18. 18 @interface Dog : Animal
  19. 19 {
  20. 20 @public
  21. 21 int speed;
  22. 22 }
  23. 23 - (void)run;
  24. 24 @end
  25. 25 // Dog的定义
  26. 26 @implementation Dog
  27. 27 - (void)run {
  28. 28 NSLog(@"跑跑跑-高度:%d", speed);
  29. 29 }
  30. 30 @end

二、继承的使用注意

  (1)编译器从上往下执行,所以在子类前面至少应该要有父类的声明;

  (2)OC中不允许子类和父类拥有相同名称的成员变量名;

  (3)OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找;

  (4)OC语言是单继承语言。在OC语言中,基本上所有类的根类都是NSObject类。

  提示:重写即子类重新实现了父类中的某个方法,覆盖了父类以前的实现。

  提示:每个类中都有一个super class指针,该指针指向自己的父类。对象中有一个isa指针,该指针指向调用该对象的类。

三、super关键字

  super关键字,在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。

  作用:

    (1)直接调用父类中的某一个方法

    (2)super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。

  使用场景:子类在重写父类方法时,想要保留父类的一些行为。

四、继承的好处和缺点

  继承的好处:

    (1)抽取出了重复的代码

    (2)建立了类和类之间的联系

  继承的缺点:

    耦合性太强

五、继承和组合

  继承的适用场合:

    (1)当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中。

    (2)当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。

  继承:###是xxx,如狗是动物,可以让狗继承动物类

  组合:###拥有xxx,如学生有书,可以让书这个类作为学生类的属性

「OC」 继承的更多相关文章

  1. 「OC」block 和 protocol

    一.block   (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动 ...

  2. 「OC」内存管理

    一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空 ...

  3. 「OC」构造方法和分类

    一.构造方法 (一)构造方法的调用 创建一个可用的对象:Person *p=[Person new]; new方法实际上是分为两步来创建一个对象: 1)使用+alloc方法来分配存储空间(返回分配的对 ...

  4. 「OC」点语法和成员变量的作用域

    一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObje ...

  5. 「OC」 多态

    一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...

  6. 「OC」 封装

    一.面向对象和封装 面向对象的三大特性:封装.继承和多态 在OC语言中,使用@interface和@implementation来处理类.   @interface就好像暴露在外面的时钟表面,像外界提 ...

  7. 「OC」 基本语法

    一.OC简介 在C语言的基础上,增加了一层最小的面向对象语法:完全兼容C语言:可以在OC代码中混入C语言代码,甚至是C++代码:可以使用OC开发Mac OS X平台和iOS平台的应用程序. 二.OC语 ...

  8. 「OC」类和对象

    一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO ...

  9. 「OC」类的深入研究、description方法和sel

    一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...

随机推荐

  1. 百度ueditor富文本编辑器的使用

    百度ueditor富文本编辑器的使用 //以下为我在官网下载的ueditor v1.3.5 php版的大楷配置步骤第一步: //配置文件的引入应该比功能文件先引入,最后设置语言类型.即:editor. ...

  2. Minix

    [1]  MINIX是一种基于微内核架构的类UNIX计算机操作系统,由Andrew S. Tanenbaum发明.MINIX最初发布于1987年,开放全部源代码给大学教学和研究工作.2000年重新改为 ...

  3. .NET(C#):XmlReader和Whitespace以及MoveToContent和ReadToFollowing方法

    原文 http://www.cnblogs.com/mgen/archive/2012/04/26/2471403.html XmlReader默认是读取XML文件中的Whitespace和注释的. ...

  4. Spring Boot的一个测试用例

    package tk.mybatis.springboot.mapper; import org.junit.Assert; import org.junit.Test; import org.jun ...

  5. Jsoup代码解读之四-parser

    Jsoup代码解读之四-parser 作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性.这部分也是Jsoup最复杂的部分,需要一些数据结构.状态机乃至编译器的知识.好 ...

  6. Static block start new thread

    Static block start new thread public class StaticThreadInit { static{ Threadt = newThread(){ public ...

  7. 去掉android的屏幕上的title bar

    在配置文件里修改 (关键代码:android:theme="@android:style/Theme.NoTitleBar.Fullscreen",如果想只是去除标题栏就后面不用加 ...

  8. window.open 使用方法

    window.open(url,name,features,replace); //parameters 解释: URL:需要打开的URL Name:打开URL的标题 Feature:控制窗口大小的参 ...

  9. Winform获取当前程序名称或路径

    以下几种方法获取当前程序名称或路径: // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径.      // 获 ...

  10. 大夏VIEW使用技巧

    HDXTextView *remark=[[HDXTextView alloc] initWithFrame:CGRectMake(leftmargin-5,labbackView.top, cell ...