Objective-C基础知识之(三):继承、#import、@class:

来源:互联网 发布:禁毒知识网络竞答试题 编辑:程序博客网 时间:2024/05/24 20:07

一、继承:

1、用法:

把相同的特征和行为定义在父类中,子类只定义特有的特征和行为。

2、继承的特点:

(1)父类、子类是相对的概念。如:人->学生->大学生中,学生即是人的子类,也是大学生的父类。

(2)继承是单向的,OC中只允许单继承。

(3)继承具有传递性。

(4)子类从父类继承了所有的实例变量和方法。私有的实例变量和方法只能继承,不能使用。

(5)没有父类的类称为根类,正常情况下,OC中只有一个根类NSObject(祖宗类)

3、继承的优势:将多个类中重复的实例变量和方法写在父类中,子类只定义独有的实例变量和方法,即保证类的完整,又能简化代码。

4、子类继承注意问题

子类可以继承父类中所有的实例变量,但是:可见度为私有的实例变量,不能在子类中使用。

子类可以继承父类中所有的方法,但是,“私有方法”无法调用,因为没有在接口部分声明,在类的外部无法识别。

当子类继承父类时,子类可以不重新声明继承的方法,不能重新声明继承的实例变量。

当子类调用从父类继承的方法时,不是在调用父类的方法,子类调用的是自己的方法,本质:子类从父类继承了相同的方法实现。

子类如果只想继承方法,不想使用父类提供的实现方法,在子类中重新实现方法,被称为:重写。

5、继承建立的两种方式

(1)建立文件时设置继承的层级

(2)文件建立后,如果需要建立继承关系,则在需要继承的文件中导入需要继承父类的头文件。


6、继承中方法的执行

继承具有传递性,在子类中执行父类的方法的顺序为:查找本类中是否有实现(重写)的方法;

如果没有,查找父类中是否有实现(重写)的方法;

如果没有,查找父类的父类中是否有实现(重写)的方法;

逐级向上查找,找到即执行。

如果没有找到方法,系统则会崩溃。


二、#import、@class:

1、#import

#import作用:导入文件的内容。

在哪儿调用,文件的内容就被导入在哪个位置。

在两个类的.h文件中,相互导入对方的.h文件时,会造成循环导入现象。

造成循环导入后,编译器无法编译到“类的接口部分”这段代码。导入不成功,无法使用,因为类的接口部分对外声明了:类名、实例变量、方法。

2、要解决上述的问题,使用@class:类名

语法:@class :类名 ;

作用:告诉编译器,@class后面的字符串是个类名,作为类名使用。没有导入头文件。有效避免循环导入头文件。

位置:在类的.h文件中,在@interface前。

使用了@class:类名后,就可以在声明中使用“类名”类型声明实例变量。

 

在类的实现部分需要导入头文件:

在类的接口部分使用@class类名,通常只是使用类的名字作为类使用。

在类的实现部分,要使用对象声明的实例变量和方法,方法是声明在接口部分(.h文件中),故需要导入类的头文件。

 


0 0
原创粉丝点击