これはばかげた質問かもしれませんが、とにかくここに行きます。Objective cでは、子クラスの開始メソッドで、self =[superinit]を設定することがよくあります。現在、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に書いたコメントから)。これが必要な理由は、ある時点で、親クラスのプロパティをivarから、たとえばいくつかの値を計算するだけに変更したい場合があるため、子供はそれらを正しくコピーする方法を知らないからです。誰かが同じタスクを達成する方法についてより良い考えを持っているかもしれないので、私はこれを書いています。