• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラス型配列が派生クラス内フィールドを認識しません)

クラス型配列が派生クラス内フィールドを認識しません

このQ&Aのポイント
  • クラス型配列が派生クラス内のフィールドを認識しないエラーが発生しています。
  • プログラムにおいて、PersonalDataクラスを継承したMailPersonalDataクラスにはmailAddressというフィールドが存在します。
  • しかし、派生クラス型の配列pdArray内において、mailAddressフィールドを参照する際にエラーが発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

配列を宣言したとき、その要素へのアクセスは宣言された型(この場合はPersonalData型)を使用することになります。したがって、PersonalDataにないフィールドやメソッドにアクセスすることはできません。 アクセス時の対処法は、……あることはありますが初心者は使わないほうがいい手法なので教えません。 # それに頼ることを覚えるとその便利さゆえにオブジェクト指向を身につけられなくなる悪魔の手法ですので それよりも、 MailPersonalData mpd = new MailPersonalData(); mpd.name = "ジョン"; mpd.mailAddress = "xx@xxxx"; pdArray[0] = mpd; PersonalData pd = new PersonalData(); pd.name = "ポール"; pd.phoneNumber = "012-345-6789"; pdArray[1] = pd; というふうに配列への代入の前に値を設定しておきましょう。

capy3
質問者

お礼

迅速でかつ分かりやすい回答をありがとうございます!(涙 現在使用しているテキストを見返してみると、「コンパイラは変数の型しか見ず、実際に変数に入っているインスタンスの型が何であるかはチェックしない」と記述されていました。その意味が初めて分かりました。これでまた前進できます。 しかし、ちょっとした疑問が生じてしまいました...。mpdもpdも代入できる配列pdArrayは、継承元クラスであるPersonalData型で宣言するしかないのでしょうか?それとも、もっと別なスマートな配列宣言の方法があるのでしょうか? 重ね重ね初歩的な疑問で恐縮です。もし宜しければ御教授下さい。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

PersonalData ってクラスに mailAddress ってメンバー, あるの?

capy3
質問者

お礼

早速のご回答、ありがとうございます。PersonalDataクラスにはmailAddressというメンバーはありませんでした。クラスの宣言と継承の理解が不十分でした。今回の件で勉強になり、誠にありがとうございました。

関連するQ&A