Fraction 3 is: 3/10
@interface 裡的宣告就如同正常的函式。
@implementation 使用了一個新的關鍵字:super
如同 Java,Objective-C 只有一個 parent class(父類別)。
使用 [super init] 來存取 Super constructor,這個動作需要適當的繼承設計。
你將這個動作回傳的 instance 指派給另一新個關鍵字:self。Self 很像 C++
與 Java 的 this 指標。
if ( self ) 跟 ( self != nil ) 一樣,是為了確定 super constructor 成功傳回了一個新物
件。nil 是 Objective-C 用來表達 C/C++ 中 NULL 的方式,可以引入 NSObject 來
取得。
當你初始化變數以後,你用傳回 self 的方式來傳回自己的位址。
預設的建構子是 -(id) init。
技術上來說,Objective-C 中的建構子就是一個 "init" method,而不像 C++ 與
Java 有特殊的結構。
存取權限存取權限
預設的權限是 @protected
Java 實作的方式是在 methods 與變數前面加上 public/private/protected 修飾語,而
Objective-C 的作法則更像 C++ 對於 instance variable(譯注:C++ 術語一般稱為
data members)的方式。
Access.h
#import <Foundation/NSObject.h>
@interface Access: NSObject {
@public
int publicVar;
@private
int privateVar;
int privateVar2;
@protected
int protectedVar;
}
@end
Access.m
#import "Access.h"
@implementation Access
@end
main.m
#import "Access.h"
#import <stdio.h>
int main( int argc, const char *argv[] ) {
Access *a = [[Access alloc] init];
// works
a->publicVar = 5;
printf( "public var: %i\n", a->publicVar );
// doesn't compile
//a->privateVar = 10;
//printf( "private var: %i\n", a->privateVar );
[a release];