在 Obj-C 和 Swift 中覆盖的工作方式与在 Java 中相同(在 Swift 中甚至用 override 关键字表示)。
显然,关于重载有很多困惑。让我们从斯威夫特开始。在 Swift 中,通常它的工作方式与在 Java 中相同:
func myFunction(a: Int)
func myFunction(a: String)
相同的方法名,接受不同的参数。编译器将根据参数的类型决定调用哪个方法。但是,添加其他参数时:
func myFunction(a: Int, b: Int)
方法名称实际上从 myFunction(_:) 更改为 myFunction(_:b:) 所以在传统意义上,这不应该被称为 重载 但我相信 Swift 只使用名称的第一部分( myFunction) 在某些情况下用于区分方法,因此这实际上也可能是重载。我对这个案子有点不确定。
在 Obj-C 中,没有重载。
我们不能在 Obj-C 中声明以下内容:
@interface MyClass : NSObject
- (void)myMethod:(id)parameterA;
- (void)myMethod:(NSInteger)parameterA;
@end
而且在改变参数个数的时候,我们也要改变方法名
@interface MyClass : NSObject
- (void)myMethod:(id)parameterA;
- (void)myMethod:(NSInteger)parameterA withAnotherParam:(id)parameterB;
@end
注意方法名称分别是-myMethod: 和-myMethod:withAnotherParam:。方法名不同时,不重载。
但是,即使在 Obj-C 中,我们也可以使用普通的旧 C 函数并且它们可以被重载:
void functionA(int a) {
...
}
void functionA(int a, int b) {
...
}