- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Obj-c]元クラスからサブクラスのメソッド)
[Obj-c]元クラスからサブクラスのメソッド
このQ&Aのポイント
- [Obj-c]元クラスからサブクラスのメソッドについて質問です。
- ClassAとClassB1には同名のメソッドがありますが、ClassAのインスタンスにClassB1のインスタンスをセットすると、なぜClassB1のメソッドが呼ばれるのか疑問です。
- また継承しているとはいえ、型が違うものを参照渡しできる理由もわかりません。どういう機能を言うのか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実装、というかアーキについてはとりあえず参考URLでも読んでみてください。 これはC++の話ですが、Objective-Cでもそう違いはないと思いますので。
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
回答No.1
どーでもよくないので予め突っ込んでおきますが、このコード上に「ClassAのインスタンス」は存在しません。 ClassA *bangaiはあくまでただの「ClassA *型の変数」です。 なぜ子クラスのメソッドが実行されるかについてはポリモーフィズム(多態性)の仕様上そうなるように作られているからだ、としか言いようがありません。
質問者
お礼
>どーでもよくないので予め突っ込んでおきますが、このコード上に「ClassAのインスタンス」は存在しません。 ご指摘ありがとうございます、一昨日ようやくわかりました allocされていないのでClassAのインスタンスはは存在しませんね ClassA *bangai はポインタ(アドレス番地)の役割しか果たしていないです。 >なぜ子クラスのメソッドが実行されるかについてはポリモーフィズム(多態性)の仕様上そうなるように作られているからだ、 >としか言いようがありません。 はい、そうなんですが なぜClassA型のアドレス(ポインタ)からClassBのインスタンスメソッドが呼べるのかがわからず メモリアドレス上に存在するのはClassBのインスタンスなのですが、 ClassA型のアドレス(ポインタ)がClassBのメソッドの関数ポインタ(この考え方が違うかも)の 場所がわかるのかがわかりません アーキテクチャを知っておいた方が良いのではないかと思っています。
お礼
ご回答ありがとうございます。 ご指定いただいたリンク先にてアーキテクトを学ばせていただきます。 Objective-cは結構なんでもできてしまうのでこういった事を学びたいと思っています。