質問: //などで書き換えています。 } //ここで別のクラスを呼び出して、次の処理に移る } } class data_2 { //このクラスで Basyo_dataで Car_listの中に入れられたインスタンスの中身を取り出したい。 } ```
回答: こんにちは。 > > 実際には Basyo_data と data_2クラスの間にはいくつかのクラスが入っているため、引数として渡していくのもスマートじゃない気がします。 > > > クラスは、ざっくり言うと変数と関数をセットにしたものです。 Basyo_dataクラスは、Car_list変数を持っています。 恐らくコンストラクタも持っていて、そこでCar_listを初期化したいのだと思いますが、それを記述できていません。まずはそのあたりの基本を学習する必要があると思います。 data_2で、Basyo_dataクラスのCar_list変数をアクセスしたいというご質問と思います。 しかし、Basyo_dataクラスはクラスであってインスタンスではないため、Car_list変数の記憶領域を割り当てられていません。Basyo_dataクラスとはBasyo_dataクラスの**インスタンス**がCar_list変数を持つという定義でしかなく、実際に領域が確保されるのはnew等でBasyo_dataクラスのインスタンスを生成した時です。 data_2でアクセスしたいCar_list変数の実体(Basyo_dataクラスのインスタンス)がどこにあるのか質問文に記載されていません。そのため、具体的な回答は難しいです。 さて、オブジェクト指向プログラミング言語と言えども、記憶領域(変数)を複数のクラスのメソッドでアクセスしたい場合の選択肢は大してありません。 1. 当該メソッドに直接引数で渡す 2. 当該メソッドが属するクラスに渡したい変数への参照メンバ変数を用意し、そのコンストラクタ等で引き渡しておく。 3. グローバル変数(publicなstatic変数が該当します。)でアクセスできるようにする。 1.を使いたくないケースでは、少数のクラスでのみアクセスする領域は2.で、ほとんど全てのクラスでアクセスしたい場合は3.で渡すとプログラムの見通しが良くなる場合が多いです。