我有方法覆盖如下。请忽略我写的方式可能不完美,只是为了样本。但是我想知道如果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应该是什么?
答案 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和孩子的关系然后这也被称为压倒一切