0%

Objective-C基础入门(继承)

Root、父类和子类

一般,NSObject是我们所说的Root类
父类和子类的相关术语:superclass/parent class, subclass/child class
子类可以继承父类的非私有实例变量和方法
⚠️ 在父类的interface中申明,并且implementation中不申明,子类才能访问其实例变量
⚠️ 在父类的implementation中申明或合成的实例变量,子类无法直接访问;需要用自定义的getter或setter方法来访问

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@interface ClassA: NSObject {   
int x;
}
-(void) initVar;
@end

@implementation ClassA
-(void) initVar {
x = 100;
}
@end

@interface ClassB: ClassA // ClassB继承了ClassA
-(void) printVar;
@end

@implementation ClassB
-(void) printVar {
NSLog (@"x = %i", x); // print x 的值,它是在ClassA中申明,ClassB中未申明的
}
@end

OC寻找方法的机制

首先,检查对象所属的类,以查看是否在该类中使用特定名称显式地定义了方法。如果是,这就是我们使用的方法。如果没有定义,则选中父类。如果这里定义了方法,就用它。如果没有,搜索仍在继续。
父类会被检查,直到发生以下两种情况之一:要么找到包含指定方法的类,要么在返回根类之后没有找到该方法。如果第一个发生了,一切都准备好了;如果出现第二种情况,就会出现问题,并生成如下警告消息: warning: ‘ClassB’ may not respond to ‘-inity’

通过继承扩展

点类和对象分配

测试

@class 指令

拥有对象的类

override方法

抽象类