iPhone:方法覆盖结果

时间:2012-07-04 08:02:21

标签: iphone

我有方法覆盖如下。请忽略我写的方式可能不完美,只是为了样本。但是我想知道如果i方法为变量“a”重写了这个输出会是什么。

- >基类

@interface A 
{
    int a=15;
}
 -(int) myFunction;
@end

- >派生类

@interface B : A 
{
    int a=10;
}
 -(int) myFunction;
@end

让图片“myFunction”返回“a”。因为,当我打电话时,它会覆盖方法,

B bObj; 
bObj.a = ? 

输出10或15应该是什么?

2 个答案:

答案 0 :(得分:1)

我假设你知道你不能在这样的标题中声明变量,并且初始化只是为了简单起见。

同样,您的B bObj尚未初始化且不是指针


bObj.a会返回10.所以[bObj myFunction]会这样。您已重写该方法并告诉编译器忽略此方法的先前实现并使用新方法。

你能说出这可能是什么输出:

A *obj = [[B alloc] init];
NSLog(@"%d", [obj myFunction]);

或者这个:

B *obj = [[A alloc] init];
NSLog(@"%d", [obj myFunction]);

答案 1 :(得分:-1)

如果child和parent都返回A然后它的方法覆盖...但是如果类A的myFunction:返回A和类b的myfunction返回B或任何引用类型返回类型具有相同的关系,那么类具有的含义Parent和孩子的关系然后这也被称为压倒一切