OCクラスの継承メソッドのリロード書き換え

1919 ワード

OCクラスの継承メソッドのリロード書き換え
資料一:
一、クラスの継承
Objective-cのクラスの継承はC++と似ていますが、Objective-cは多重継承をサポートしていません.1つのクラスには親が1つしかありません.単一の継承でObjective-cの継承関係が簡単で、プログラムの管理が容易です.Object-cのすべてのクラスの親はNSObjectです.
Objective-cにおけるクラスの継承例:
| | |
二、方法書き換え
Objective-cでは、同じメソッドを書き直す必要がなく、親メソッドを直接使用することができます.しかし、親メソッドを使用するのではなく、一定の修正をしたい場合があります.どうすればいいですか.親と同じメソッド名、戻りタイプ、パラメータを持つサブクラスに記述すると、親のメソッドを上書きできます.比較的簡単です.
三、方法の重荷
Objective-cでは、メソッドは再ロードできません.すなわち、クラスでは、名前が同じで、パラメータの個数が同じで、パラメータのタイプが異なる、戻り値のタイプが異なる2つの方法を定義することはできません.そうでなければXcodeはエラーを報告します.次の方法は間違っています.

`-(``void``)setX:(``int``)intX;  `

`-(``void``)setX:(``double``)doubleX;`


資料2:
1.リロードとは?ocには重荷は存在しない.
同じ役割ドメイン内に、リロード関数と呼ばれる同じ関数名、異なるパラメータリストを持つ関数のセットがあります.
C++関数名は同じで、関数の名前は同じです.パラメータリストが異なるとは、パラメータの個数またはタイプが異なることを意味します.
ocの関数名は同じで、関数名とすべてのラベルが同じです.ocは、同じ役割ドメイン内の同名関数を許可しないため、リロードは許可されません.
すなわち、関数名が同じで、パラメータの個数が同じであるが、タイプが異なる2つの関数が存在することは許されない.
ocでは同じ役割ドメイン内で同じ関数名は許されないため,ocには厳密な重荷はない.次のようになります.
-(void) test:(int) intValue;
-(void) test:(float) floatValue; 関数名testが重複するがパラメータタイプが異なるため、c++でリロードが構成されます.ocでエラーが発生しました.関数名はtestなので、リロードは構成されません.
-(void) test:(int) x andY:(int) y;
-(void) test:(int) x andY:(double)y;//エラーか、重複か、関数名はすべて(test:andy:)
-(void) test:(int) x :(double) y;//正しい、名前が違う(test:::)
1つのメソッドに別のメソッドを含めることで、異なる関数名を持つリロードのような機能を達成します.一般的には、次のようなコンストラクション関数に使用されます.
init()
intwithx(){initへの呼び出しを含む}
intwithxy().....{initxへの呼び出しを含む}
特定の関数ほど、前の既存の方法に基づいて構築できます.
2.書き直しとは?
子クラスと親クラスの間で発生するメソッドを書き換え、子クラスで親と同じメソッド名を定義するメソッドにより、親クラスから継承されたメソッド定義を変更します.
書き換えの役割は、親から継承されたメソッド定義を変更することです.(継承は増加、修正、減少または削除の親メソッドのみ)
書き換えの要件:すべてのラベルを含むのは同じです.つまり、パラメータの個数を含むのは同じで、戻り値は同じです.
書き換え後のメソッド検索プロシージャ:サブクラスポインタを使用してメソッドを呼び出す場合は、サブクラスメソッドを優先的に選択し、親メソッドがない場合にのみメソッドを検索します.
親メソッドを直接使用するにはsuperを使用します.親子の間の多態性を体現して、どのように親子の同名の方法を探します