objective-c的对象定义
在objective-c中定义两个类,用于测试对象的定义操作。
首先定义两个类Vehicle和Ship。
@interfaceVehicle
-(void)move;
@end
@interfaceShip:Vehicle
-(void)shoot;
@end对象定义操作的方法会有很多,下面罗列一些典型的操作方法。如下所示:
Ship*s=[[Shipalloc]init];
[sshoot];
编译器不会报警,因为向s对象发送消息shoot,其类可以使用shoot方法处理这个消息;
[smove];
编译器不会报警,因为向s对象发送消息move,可以上溯到Ship类的父类Vehicle,使用父类的方法move处理这个消息。这是面向对象开发的继承特性的完美体现。
在编译器编译和运行时执行代码过程中,都不会有任何问题出现。
Vehicle*v=s;
编译器不会报警,因为向s对象所属类的父类就是Vehicle。
[vshoot];
编译器这时会报警,但运行时不会崩溃。因为编译器仅仅知道它是一个Vehicle,而不知道它其实是一个Ship,但是我们自己知道,所以可以这么用。
idobj=...;
[objshoot];
编译器不会报警,因为它知道这个shoot方法是存在于整个项目中的。但在运行时,它可能会失败,因为obj不一定是Ship类的对象,虽然它在编译时可能是。
[objsomeMethodNameThatNoObjectAnywhereRespondsTo];
编译器会报警了,因为它不知道这个名称如此乱七八糟的方法。因此,运行时也会失败,根本没有对象有这个方法来响应这个消息。
NSString*hello=@”hello”;
[helloshoot];
编译器会报警了,因为它知道NSString没有这个shoot方法。因此,运行时也会失败。
Ship*helloShip=(Ship*)hello;
编译器不会报警。以上是学习objective-c的一些笔记。