0

以下のようなメソッドオーバーライドがあります。サンプルのためだけに、完全に書かれていない可能性があるため、私が書いた方法は無視してください。しかし、変数「a」に対してこのようにメソッドがオーバーライドされた場合、出力はどうなるか知りたいです。

-> 基本クラス

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

-> 派生クラス

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

Lets image "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 に答える