2012-07-04 49 views
0

我有方法覆蓋如下。請忽略我寫作的方式,可能寫得不完整,僅供參考。但我想知道如果我的方法重寫像這樣的變量「a」會輸出什麼。iPhone:方法重寫結果

- >基類

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

- >派生類

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

讓圖像 「myFunction的」 返回 「一」。因爲,它的方法覆蓋,當我打電話像,

B bObj; 
bObj.a = ? 

什麼應該是輸出10或15?

回答

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

如果孩子和家長都將返回一個那麼它的方法覆蓋......但是,如果類A的myFunction:返回A和B的myfunction返回B或任何引用類型的返回類型,它們具有相同的關係,有過類的父類和子類的關係,那麼這也稱爲覆蓋

+0

這是一個非常令人困惑的答案。我很確定它也不正確。沒有什麼(語法上)錯誤覆蓋一個方法,並提供相同的實現,因爲你實際上超類 –

+0

..我錯誤地把它放在那裏沒有..對不起..但休息部分是非常清晰和正確.. – Abhishek