Objective-C は

C というより Ruby の方が近いかもしれない。
C 〜 C++java という型に厳密な世界に生きてくると、

@interface Hoge : NSObject {
}

 -(id)normalMethod:(NSObject*)arg1;
@end

@interface HogeHoge : NSObject {
}

 -(id)normalMethod:(NSObject*)arg1;
 -(id)abnormalMethod:(NSObject*)arg1;
@end

のようなクラスについてこのままで多態のように、Hoge と HogeHoge の normalMethod が扱えてしまう*1し、カテゴリ使って NSString に normalMethod とか作っておくと、それさえもフリーダムに呼べるw 当然、

int main() {
 id hogehoge = [Hoge new]; // java 的には Object hoge = new Hoge(); しているようなもの
 [hogehoge normalMethod]; // だから、Object.normalMethod(); 無いじゃない?
}

とやってコンパイル通ってしかも動く。すごく C ファミリーっぽくないw
真面目に

int main() {
 Hoge hoge = [Hoge new];
 [hoge normalMethod];
}

してくれていればそうでもないんですけどw

*1:メソッドが動的に解決されるので、同じ名前、引数であればいい。後は Object 相当の id とかでインスタンスを宣言しておけばいい