似乎有一些争论/分歧,关于在Objective-C中是否可能进行“方法重载”。抛开在Objective-C中定义方法重载与C++相等的问题(因为存在方法签名语法差异),特别询问以下哪些是允许的,哪些不允许:
1)一个类声明/实现这两个方法:
- (void) doSomethingWithObject:(ClassA*) object;
- (void) doSomethingWithObject:(ClassB*) object;
2) 一个声明/实现这两种方法的类:
- (void) doSomethingWithObject:(ClassA*) object;
- (BOOL) doSomethingWithObject:(ClassA*) object;
3) 声明/实现该方法的类:
- (void) doSomethingWithObject:(ClassB*) object;
当其父类声明/实现此方法时:
- (void) doSomethingWithObject:(ClassA*) object;
(以及冲突返回值的类比),无论是 A)
ClassB
是从 ClassA
派生的,还是 B)不是。
ClassA
的实例。这意味着该类及其子类的所有对象都必须接受相同方法中ClassA
的任何对象。这是必要的,因为子类的实例可以在任何超类的实例可以使用的地方使用。但是您试图重新声明该方法,要求更窄-它只接受ClassB
的对象。运行时,方法将被调用,但是否可以按照它所传递的参数工作是另一个问题。 - Ken Thomases