0

我有如下方法覆盖。请忽略我写的方式,它可能写得并不完美,仅供参考。但是我想知道如果我的方法像这样为变量“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 应该是什么?

4

2 回答 2

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]);
于 2012-07-04T08:08:33.743 回答
-1

如果孩子和父母都将返回A,那么它的方法将被覆盖......但是如果类A的myFunction:返回A并且类b的myfunction返回B或任何具有相同关系的引用类型返回类型任何类都有意味着父子关系那么这也称为压倒一切

于 2012-07-04T08:09:35.510 回答