歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Objective-C的對象定義

Objective-C的對象定義

日期:2017/3/1 10:08:27   编辑:Linux編程

在objective-c中定義兩個類,用於測試對象的定義操作。

首先定義兩個類Vehicle和Ship。

@interface Vehicle
- (void)move;
@end

@interface Ship : Vehicle
- (void)shoot;
@end

對象定義操作的方法會有很多,下面羅列一些典型的操作方法。如下所示:

Ship *s = [[Ship alloc] init];
[s shoot];
編譯器不會報警,因為向s對象發送消息shoot,其類可以使用shoot方法處理這個消息;

[s move];
編譯器不會報警,因為向s對象發送消息move,可以上溯到Ship類的父類Vehicle,使用父類的方法move處理這個消息。這是面向對象開發的繼承特性的完美體現。
在編譯器編譯和運行時執行代碼過程中,都不會有任何問題出現。

Vehicle *v = s;
編譯器不會報警,因為向s對象所屬類的父類就是Vehicle。

[v shoot];
編譯器這時會報警,但運行時不會崩潰。因為編譯器僅僅知道它是一個Vehicle,而不知道它其實是一個Ship,但是我們自己知道,所以可以這麼用。

id obj = ...;
[obj shoot];
編譯器不會報警,因為它知道這個shoot方法是存在於整個項目中的。但在運行時,它可能會失敗,因為obj不一定是Ship類的對象,雖然它在編譯時可能是。

[obj someMethodNameThatNoObjectAnywhereRespondsTo];

編譯器會報警了,因為它不知道這個名稱如此亂七八糟的方法。因此,運行時也會失敗,根本沒有對象有這個方法來響應這個消息。

NSString *hello = @”hello”;
[hello shoot];

編譯器會報警了,因為它知道NSString沒有這個shoot方法。因此,運行時也會失敗。

Ship *helloShip = (Ship *)hello;
編譯器不會報警。

以上是學習objective-c的一些筆記。

Copyright © Linux教程網 All Rights Reserved