《Objective-C入门经典》——2.3节管理Objective-C世界中的继承

2.3 管理Objective-C世界中的继承
Objective-C入门经典
读者在阅读本书的过程中会发现与其他面向对象语言相比,在Objective-C中实现子类化和继承的方式更多。继承的基本要素是比较简单的,只需要声明一个基对象即可,这个基对象可以拥有自己的方法和实例变量。按照Objective-C程序设计最佳实践的要求,应该将基对象的实例变量声明成对其他类不可见,其他类通过访问器来访问实例变量。

阅读第9章以了解如何使用声明式属性自动生成访问器。
类的方法可以在类接口文件(.h文件)或实现文件(.m文件)中进行声明,在接口文件中声明的方法对其他类是可见的,但可以通过将其声明移到实现文件中来对外部世界隐藏这些方法。在实现文件中隐藏方法有助于提升类的封装性。

阅读第18章中“使用类扩展”一节以了解如何隐藏类的方法。
接着就可以覆写基对象了,每个覆写基对象的类都会继承基对象的方法和变量,并且能够覆写这些方法,这样就能够控制子类如何处理这些方法了。如假设基对象有一个名为init的方法,则子类对该方法的处理方式有3种。

调用—如果基类声明了init,那么当在子类上调用init时实际上调用的是基类的init方法。
覆写—如果在子类中声明了init方法,那么当在子类上调用init方法时实际上调用的是子类的init方法。
覆写并调用—在子类覆写基类的方法时总是可以调用[super init](或者基类的其他方法)。
这意味着在子类中可以合并基类的功能或者替换基类的功能。如果子类化了一个子类,那么可以通过super来调用继承链中该方法的各种实现,直至基类中的实现。从面向对象的角度来看,使用该对象的类看到的是基对象及其所有派生类都以相同或不同的方式实现了某一特定的方法—即抽象对象应该实现的功能(如在银行账号中应该能够报告账号余额)。

上面讨论的内容都是面向对象程序设计的标准。Objective-C通过多种方式对继承的概念进行了扩展。继承和子类化提供了一种有序的方式将其他对象中的代码集成到自己的对象,当然这里所指的其他对象主要是指自己的对象的超类。

Objective-C提供了多种方式将其他结构中的代码集成进自己的对象。除了继承之外,还包括:

协议—这是一组可以被类采纳的方法。采纳协议的类需要实现协议中的方法,一旦一个类采纳了一个协议之后就可以在该类的实例上调用任何协议中的方法了(可以将协议中的方法标记为可选,这样的话在调用时就需要确保只调用那些必须被实现的方法或者被实现的方法)。各个采纳协议的类会以其自己的方式(通常通过其自己的变量)来实现协议。这种协议结构在某种程度上实现了多继承的部分特性。协议中的方法可能会出现在几个毫不相干的类中,从而扩展了通过继承链来共享方法的思想。
分类—协议可以被任何类所采纳,而分类则由一组被添加到某一特定类的方法构成。使用分类可以向一个无源码的既有类中添加方法。
扩展—扩展有时候也被称为匿名分类,它是在类的实现文件(通常是.m文件)中进行声明和实现的。扩展可以向一个类添加方法和属性,还可以重定义属性(如将readonly变成readwrite)。

时间: 2024-09-29 17:11:14

《Objective-C入门经典》——2.3节管理Objective-C世界中的继承的相关文章

《Visual Basic 2012入门经典》----2.6 管理项目

2.6 管理项目 Visual Basic 2012入门经典要高效地创建界面和编写代码,必须理解Visual Basic 2012项目由什么组成以及如何在项目中添加和删除各种组件.在本节中,你将学习"Solution Explorer"窗口以及如何使用它来管理项目文件.你还将学习项目和项目文件的一些细节,包括如何修改项目的属性. 2.6.1 使用"Solution Explorer"管理项目文件 开发项目时,项目将变得越来越复杂,它们通常包含很多对象,如窗体和模块(

《HTML5移动应用开发入门经典》—— 第2章 移动开发中新的HTML5标签和属性

第2章 移动开发中新的HTML5标签和属性 HTML5移动应用开发入门经典本章介绍如下内容: 如何使用HTML5中的新标签及属性:HTML5中的其他变化:HTML5的移动支持:使用HTML5开发移动Web应用的理由.HTML5中有许多在构建Web页面及应用中会用到的新标签和属性.在这一章中,读者将学习许多HTML5的新特性以及它们在移动设备上的运用.新款智能手机及平板电脑正在逐渐接纳HTML5,而本章将会告诉读者如何加入这一次革新的盛宴.

《Java 7程序设计入门经典》一3.8 for循环中的一些特殊情况

3.8 for循环中的一些特殊情况 因为for循环有很多变化,所以for循环是Java语言中用处最多的语句.一个最常见的用法是有多个循环控制变量.在使用多个循环控制变量时,每个表达式的初始化表达式和迭代表达式用逗号分隔.下面是一个简单的例子: 程序输出如下所示: 注意,逗号将两个初始化表达式和迭代表达式分开的方式.当循环开始时,在循环的初始化部分初始化变量i和变量j.每次循环开始时,递增变量i,递减变量j.当i大于等于j时结束循环.理论上,可以有任意数量的循环控制变量,但实际上,两三个循环控制变

《Objective-C入门经典》——导读

目 录 第1部分 第一章 Objective-C概述 1.1 Objective-C简介 1.2 注册成为Apple开发者 1.3 配置开发环境1.4 总结1.5 问与答 1.6 测验 1.7 练习 第2章 使用Objective-C进行面向对象程序设计 2.1 Objective-C世界中的面向对象程序设计 2.2 使用对象创建C 2.3 管理Objective-C世界中的继承 2.4 总结 2.5 问与答 2.6 测验 2.7 练习 第3章 使用Objective-C中的面向对象 特性第4章

《iOS 8应用开发入门经典(第6版)》——第2章,第2.1节使用Xcode

2.1 使用Xcode iOS 8应用开发入门经典(第6版) 当您需要编写代码(实际上是输入语句让iOS设备神奇地工作)时,应考虑使用Xcode.Xcode是一种集成开发环境(IDE),让您能够管理应用程序的资源,编辑将不同部分组合起来的代码和用户界面(UI). 按第1章的说明安装开发工具后,便可在硬盘根目录的文件夹Applications或Launchpad中找到Xcode了.本章介绍Xcode工具的基本用法,如果您还没有安装这些工具,请现在就安装. 启动Xcode.经过一段时间后,将出现如图

《Android应用开发入门经典(第3版)》——第6.4节ProgressBar和SeekBar

6.4 ProgressBar和SeekBar Android应用开发入门经典(第3版) ProgressBar(android.widget.Progressbar) 和SeekBar(android.widget.SeekBar)能够揭示当前发生的事件状态.例如当用户界面是一个图像文件下载时,可能需要展示一个ProgressBar.圆形的并且揭示当前正在发生一些事情的ProgressBar被称为不确定的进度栏.横向的ProgressBar能够揭示事件的完成情况.SeekBar与横向的Prog

《Objective-C入门经典》——1.3节配置开发环境

1.3 配置开发环境 Objective-C入门经典 Objective-C的开发环境的核心是Xcode,它是运行于Mac上的一个集成开发环境(IDE).读者即使在没有注册开发者计划的情况下也能够免费从 Mac App Store 上下载这个工具(如果需要下载未发布的beta版本的Xcode,则需要成为一个注册开发者,但大多数的文档仍然可以在developer.apple.com上公开区域中找到).Xcode的自动安装过程会将其所有文件安装到硬盘根目录下的Developer文件夹中.这意味着在默

《iOS 9应用开发入门经典(第7版)》——第2章,第2.1节使用Xcode

第2章 Xcode和iOS模拟器简介iOS 9应用开发入门经典(第7版) 本章将介绍: 如何在Xcode中新建项目: 代码编辑和导航功能: 在什么地方给项目添加类和资源: 如何修改项目属性: 针对iOS设备和iOS模拟器编译应用程序: 如何解读错误消息: iOS模拟器的功能和局限性: 在iOS模拟器中添加新设备. 您将在两个应用程序中完成主要的开发工作:Xcode和iOS模拟器,它们提供了设计.编写.测试iPhone和iPad应用程序所需的所有工具.另外,不同于其他平台,它们是完全免费的. 本章

《Android游戏编程入门经典》——4.4节对比模拟器和Android设备

4.4 对比模拟器和Android设备 Android游戏编程入门经典 模拟器允许您在不同的Android操作系统上并以不同的屏幕分辨率测试程序,但是模拟器(之前称为Android虚拟设备或AVD)存在限制.即使在高端开发PC上,模拟器也很缓慢.现在,高端机器将拥有类似6核处理器(或者是服务器主板上有两个这样的处理器)和8GB或更多RAM的配置.AVD通常配有512MB或1GB的RAM.图4.19显示了AVD配置对话框,注意Hardware(硬件)列表底部的Device RAM Size(设备R