繁体   English   中英

覆盖Objective C类中的方法

[英]Override methods in an Objective C Class

为什么我不能这样做,我怎么能在Objective C中执行相同的行为?

@interface Test
{

}

- (void)test:(Foo *)fooBar;
- (void)test:(Bar *)fooBar;

@end

提前致谢 !

这称为重载,而不是覆盖。 Objective-C方法不支持类型上的重载,只支持方法和参数名称(并且“重载”对于正在发生的事情来说并不是一个很好的术语)。

惯例是根据接受的参数对方法名称进行变化:

- (void)testWithFoo:(Foo *)foo;
- (void)testWithBar:(Bar *)bar;

不,你不能这样做。 这实际上是Obj-C的“高度动态”性质,正如你所说,这使得它成为一个非常糟糕的主意; 想像:

id objectOfSomeType = [foo methodReturningId]; //It's not clear what class this is
[Test test:objectOfSomeType]; //Which method is called? I dunno! It's confusing.

如果你真的,真的想要这种行为,我你可以像这样实现它:

- (void)test:(id)fooBar
{
    if ([fooBar isKindOfClass:[Foo class]])
    {
        //Stuff
    }
    else if ([fooBar isKindOfClass:[Bar class]])
    {
        //You get the point
    }
}

但是,在所有情况下我都能想到,使用不变量的方法是最合适的:

- (void)testWithFoo:(Foo *)foo;
- (void)testWithBar:(Bar *)bar;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM