类别和子类中被重写的方法的调用优先级

halileohalilei

我正在使用Objective-C进行一个项目,并且遇到了一种情况。

假设我有一个名为的类Foo我为此类实现了一个类别,Foo+Bar并覆盖了该Foo方法的方法fooMethod:

然后,我为创建一个子类Foo,命名该类Baz并重写fooMethod:该类。

  1. 当我fooMethod:Baz对象使用该方法,将调用哪个实现?里面Foo+Bar的一个还是里面的一个Baz
  2. Objective-C如何处理这种情况?为什么?

我愿意接受任何好的解释和/或文档。

毕马威

如果您覆盖类别中的方法,则行为是明确未定义的所以请不要:

如果在一个类别中声明的方法的名称与原始类中的方法的名称相同,或者在同一类(甚至是超类)的另一个类别中的方法的名称相同,则该行为在使用哪种方法实现时未定义运行。

如果要覆盖在超类的类别中一次定义的方法,那么当然会调用子类的实现。

但是在这里,您将覆盖在超类中两次定义的方法。行为可能是不确定的,因为您会覆盖未定义的实现。即使这行得通,无论如何还是不好的代码。

真的,请不要这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章