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的一些笔记。

相关推荐