これは愚かな質問かもしれませんが、とにかくそれはとにかく行きます。目的cでは、子クラスの初期化メソッドでは、self = [super init]を設定することがよくあります。さて、selfは子クラスのものであり、変換は不要です。これは、親クラスのinitメソッドが何らかの形で、実際にその子クラスに属するオブジェクトを返すことを意味します。親クラスのメソッド/プロパティが子クラスのオブジェクトを返す
私の質問は:子クラスから呼び出されたときに子クラスからオブジェクトを返す親クラスの他のメソッドやプロパティを定義できますか?私が思うにファクトリメソッドと呼ばれるJavaに似たものがあるので、おそらくこの質問はあまりにも過激ではない。
編集1.私はParentClassメソッドで見つけることができることを知っている、私は実際にクラスChildClassからのオブジェクトに対して操作していることを示しています。これは[自己クラス]を見ていることです。しかし、私は、が子クラスからオブジェクトを返すを返すParentClassのメソッドを宣言したいと思います。さらに良いことに、私は返されたオブジェクトに正式な変換が必要でさえないことを望みます。
例えば、私は次のような何かをする親クラスのメソッドたい:子クラスで今すぐ
-(ChildClass *) partialCopyOfSelf {
//returns an object which is a partial copy of self (only copying properties that also
// exist in parent class, but such that applying [result class] will yield the child class
// and will require no further conversion
(ChildClass *) copy=[[ChildClass alloc] init];
//now copy stuff
return copy;
}
を、私は次の並べ替えのようなものを実装することができるようにしたい:
-(MyClass *) copyOfSelf {
MyClass *copy=[super partialCopyOfSelf];
// now copy properties that only exist in my child class
return copy;
}
編集2(@ wbyoungに投稿したコメントから)。私はこれを望んでいる理由は、ある時点で私は親クラスのプロパティをivarsからおそらくちょうどいくつかの値を計算することに変えることができるかもしれないので、子供はそれらを正しくコピーする方法を知らないだろうということです。私はこれを書いています。誰かが同じ仕事をどうやって達成するかという良いアイデアを持っているかもしれないからです。
@ Jenoxの回答 – user1258240
に対する私の編集とコメントを参照してください。これは悪い考えのように思えます。 '[[self class] alloc] init]'を呼び出してコピーを作成(あるいは 'init'をスキップ)し、必要に応じて値を取り除くことができますが、部分コピーを使うと問題に遭遇するようです。 – wbyoung
ええ、私はそれを行うことができたと思う、ありがとう!問題にぶつかることに関しては、私はとにかく試してみるのは冒険的ですが、このアプローチが厄介なシナリオを指定することができればうれしいでしょう。私がこれをしたい理由は、ある時点では、親クラスのプロパティをivarsからおそらくちょうどいくつかの値を計算することに変えることができるかもしれないので、子供はそれらを正しくコピーする方法を知らないでしょう。 – user1258240