Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone:方法重写结果_Iphone - Fatal编程技术网

iPhone:方法重写结果

iPhone:方法重写结果,iphone,Iphone,我有如下方法覆盖。请忽略我写的方式,它可能不是完美的,只是为了样本。但我想知道,如果我像这样为变量“a”重写方法,输出会是什么 ->基类 @interface A { int a=15; } -(int) myFunction; @end ->派生类 @interface B : A { int a=10; } -(int) myFunction; @end 让图像“myFunction”返回“a”。因为,当我调用like时,它会进行方法重写 B bObj; bOb

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

->基类

@interface A 
{
    int a=15;
}
 -(int) myFunction;
@end
->派生类

@interface B : A 
{
    int a=10;
}
 -(int) myFunction;
@end
让图像“myFunction”返回“a”。因为,当我调用like时,它会进行方法重写

B bObj; 
bObj.a = ? 

输出10或15应该是什么?

我假设您知道不能在这样的标题中声明变量,那里的初始化只是为了简单

类似地,您的
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]);

如果子级和父级都将返回,则其方法将重写。。。但是,如果类A的myFunction:返回A,而类b的myFunction返回b,或者任何引用类型返回类型,它们具有相同的关系,这些类都表示父级和子级关系,那么这也被称为覆盖,这是一个非常混乱的答案。我很确定这也不正确。重写一个方法并提供与您实际使用的超类相同的实现(语法上)没有什么错。。我错把它放在那里了。。很抱歉但剩下的部分是非常清楚和正确的。。