Javaプログラミング インスタンス生成時の疑問

このQ&Aのポイント
  • Javaプログラミングにおいて、インスタンス生成時に疑問を感じました。
  • 特に、Fieldクラスにguiオブジェクトを渡す方法について悩んでいます。
  • 現在テトリス自作に挑戦している中で、どのように対処すれば良いのか疑問です。
回答を見る
  • ベストアンサー

Javaプログラミング インスタンス生成時の疑問

現在Javaを学習中の者です。 一通り入門編を終えたところで、テトリス自作に挑戦している最中です。 // 利用クラスのインスタンス生成 block = new Block(); field = new Field(); gui = new GUI(field); proc = new Proc(gui, field, block); 本体Tetrisクラスのコンストラクタ内でこのような記述をしております。 ここで疑問に感じたのですが、例えばFieldクラスにguiオブジェクトを渡したいとなった場合、どう対処するのでしょうか。 field = new Field(gui); gui = new GUI(field); これではおそらくguiインスタンス生成前にオブジェクトを渡しているためおかしな事になってしまいますよね? 実際にやりたい訳ではなく、「こうしたいときどうすればいいんだろう」と思っただけなのですが、気になったので質問させて頂きました。 模索しながら作成中のため、記述自体に突っ込みどころがあるかもしれません…。

  • ppmcn
  • お礼率95% (43/45)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.1

field = new Field(); gui = new GUI(); field.setGUI(gui); gui.setField(field); といった感じそれぞれsetterを作ってそれを呼ぶようにすれば良いと思います。

ppmcn
質問者

お礼

ご回答を参考に調べてみたところ、getter/setterという概念があるのですね。 勉強になりました。ありがとうございました。

関連するQ&A

  • インスタンス生成について

    いつもお世話になっております。 今回はインスタンス生成について質問させて下さい。 String クラスのインスタンス生成は、 String str1 = new String(); のように明示的に new 演算子を用いる方法と、 String str2 = "hoge"; のように生成する方法がありますよね。 str2 の方は、JVM が(?) 勝手にコンストラクタを呼び出してくれて、 インスタンスを生成してくれる、という認識でよいのでしょうか? また、明示的に「 new 演算子 + コンストラクタ」でインスタンスを生成する場合と、 そうでない場合の使い分けなどはあるのでしょうか? そもそも String 以外に、このような複数のパターンでインスタンスを生成することができる クラスは他にもあるのでしょうか? 以上、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • インスタンスとオブジェクト 生成

    クラスのオブジェクトを生成するときに(newをつかって) ●インスタンスを生成する。 ●オブジェクトを生成する。 と参考書に書いてありますが、言い方はどちらでもいいそうです。 でも、2種類の言い方がるということは厳密には意味が違うような気がするのですが、皆さんはどう思いますか? またどちらの言い方を使っていますか? どちらが正しいのでしょうか?

    • ベストアンサー
    • Java
  • クラスのインスタンスの生成

    javaの勉強を始めたばかりの初心者です。 クラスのオブジェクトの生成方法は(1)の方法だけだと思っていたのですが, 本を読んでいると以下の(1)~(3)の3種類の生成の方法がでてきます。 オブジェクトの生成方法について以下の質問にお答えいただきたいです。 【質問1】 (2)のオブジェクトの生成方法は以下のような考え方でしょうか? BufferedReader br = new BufferedReader(); InputStreamRader k = InputStream(); BufferedRader br = new BufferdRader(k); これを省略して・・・ BufferedReader br = new BufferedReader(new InputStreamReader ()); 【質問2】 (3)のオブジェクト生成方法は以下の考え方でしょうか Container ct = new Container(); ct = frame.getContentPane(); これを省略して・・・・ Container ct = frame.getContentPane(); 【質問3】 オブジェクト生成方法はこの3種類の他にもあるのでしょうか 【質問4】 (1)~(3)の方法には使い分け(ルール)があるのでしょうか? 例えば「このクラスの場合この方法」というような -------------------------------------------------------------------- (1)MyClass br = new MyClass();   クラス名 オブジェクト = new コンストラクタ; -------------------------------------------------------------------- (2)BufferedReader br = new BufferedReader(new InputStreamReader ()); -------------------------------------------------------------------- (3)Container ct = frame.getContentPane(); --------------------------------------------------------------------

    • ベストアンサー
    • Java
  • オブジェクト生成時のセオリーについて

    オブジェクト指向を採用しているプログラミング言語において、ほとんどの場合、オブジェクト生成時に使用されるコンストラクタは返り値を持てません。 また、コンストラクタにて例外を投げるといったことは推奨されていないケースが多いです。 そんな中で、コンストラクタに何らかの引数を渡してインスタンスを生成するクラスの場合、不十分な引数を渡すことで使用できない状態となるインスタンスが生成されることがあります。 こういったことを踏まえて、渡される引数が適しているものであることを確認する役割というのは使用されるクラス自身が担うのか、クラスを生成する外部の処理(ファクトリー的なクラス・メソッド)が担うのか、どちらが一般的なセオリーなんでしょうか? 無論、不十分なインスタンスが誤って使用されないようにメソッドにエラー処理をかけ、「使用できない状態のオブジェクトである」ことを通知するのは当然なのでしょう。 ただ、最近知り合いから「クラスはできるだけ不変な状態を保つよう設計した方がいい。そのほうが使いやすく、再利用時のバグが減る」という話を聞いて状態を持たないクラスの設計というのを考えこんでしまい、悩んでいます。 わかりにくい質問かもしれませんが、回答よろしくお願いします。

  • 《instantiate》(インスタンス化)と《create》(生成)

    《instantiate》(インスタンス化)と《create》(生成)が分かりません。 《instantiate》(インスタンス化)は、必要とする側の分類子の操作が、必要とされる側の分類子のインスタンスを生成することを示す。と書かれています。 《create》(生成)は、必要とする側の分類子が、必要とされる側の分類子のインスタンスを生成することを示す。と書かれています。よく分かりません。 JAVAでコーディングするとどのような感じになるのでしょうか? instantiateで検索していたら以下のようなコーディングが見つかりました。 public static class Commands { static Commands() { CloseCardCommand = new Command("CloseCard"); AddCardCommand = new Command("AddCard"); } public static Command CloseCardCommand { get; private set; } public static Command AddCardCommand { get; private set; } } このコーディングで、どのような処理をしているかも分かりません。 必要とする側の分類子の操作とは、Commandsでしょうか? 必要とされる側の分類子とは、CloseCardCommandとAddCardCommandでしょうか? 《create》(生成)の場合、どのようなコーディングになるのでしょうか? コンストラクタで CloseCardCommand = new Command("CloseCard"); AddCardCommand = new Command("AddCard"); と書くのではなく、クラス内(コンストラクタやメソッドの外)に書くのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • インスタンス化について(ポリモーフィズムについて)

    Java初心者です。 Javaの書籍で、ポリモーフィズムを説明している箇所において オブジェクトを生成する際に、以下のような書き方をしているのを見ます。 1.----- スーパークラス名 オブジェクト名 = new サブクラスのコンストラクタ名(); -------- 上記は、 何を実現する為に、左辺と右辺のクラス名とコンストラクタ名を変えているのでしょうか? (もちろん詳細は実際に書かれたメソッドや変数によると思いますが、一般的な話として。) また併せて、 2.----- サブクラス名 オブジェクト名 = new サブクラスのコンストラクタ名(); ------- と書いた時とでは、使用(アクセス)出来るメソッドや変数、 生成されたオブジェクトの中身が、どのように変わってくるのでしょうか? 2.の方法では、何が実現出来ないのでしょうか? 教えて下さい!

    • ベストアンサー
    • Java
  • Javaでテトリスを作成(OOPで)

    JavaでGUIのテトリスを作成しているのですが、処理でちょっと困っています。 次のようにオブジェクト指向で作っているのですが、なにか違和感が感じます。 問題点があったら教えてください>< Field.java テトリス全体のmap どこにブロックがあるかを保持 Block.java テトリスのBlock(テトリミノ)のスーパークラス。このサブクラスでそのBlockの形を保持 TetrisProcess.java テトリスの処理をする。Blockの移動、移動できるかを確認。Threadをたてる。 Blockが落ちてくる処理なんですが、TetrisProcessからBlockに『次の形はなに?』と聞いて、Fieldに『次の形はこれだから、下(横)へ進める?』っていう処理を考えているのですがどうでしょうか?? 駄文、本当にごめんなさい・・・

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------

  • new演算子が、インスタンスの参照を返さない!?

    どうもこんにちは。 現在、iアプリ向けプログラムを作成しています。 しかし、あるクラスだけが、インスタンスを作成できない(?) ようです。 他のクラスの記述と、見比べても差がほぼありません。 コンストラクタの中に、何も書かないようにしたりしてもダメでした。 サンプルコードは、これです。 // ---------------------------------------------------------- // Window window = new Window( 10, 15+(15*6),               D.WIN_FLAG_NOCONTROL, 8, 8, 8 ); System.out.println( "エフェクト"+ new Effect() ); //つまり、コンストラクタから参照が得られないのが、問題 Effect effect = new Effect(); System.out.println("effect:"+effect); // ---------------------------------------------------------- // まとめると、Windowクラスのインスタンスは、作れるのに、 Effectクラスは、作れないという事です。 new Effect()のところで、NullPointerException例外が、発生してしまいます。 下記は、Effectクラスのコンストラクタです。 //コンストラクタ Effect() { g = MainCanvas.g; nKey = MainCanvas.nKey; } 特に変わったところは、ありません。 コンストラクタ内の二行を消しても、同じ結果でした。 もしかして、KVMが、壊れたとかでしょうか? ヒープの容量も十分にあったので、それが問題では無いと思いますが、 どうでしょうか? 見直すポイントがあれば、教えて下さい。 お願いします。

    • ベストアンサー
    • Java
  • 外部ファイルのクラスのインスタンスが生成できない

    いつもお世話になっております。 PHP(Ver5.2)が利用できるレンタルサーバーを借りていろいろやっているのですが、 include_once した外部PHPファイルの中のクラス定義のコンストラクタがCallされません。 //外部クラスの記述 class A{ public function __construct(){ echo "OK"; } } //メインPHPの記述 include_once "xxx.php"; $obj = new A(); ↑におけるメインPHPをブラウザから呼び出したとき、本来なら OK とechoされるはずなのに、何も表示されません。 また、クラスAに定義したpublicなfunctionをCallしようとすると、定義されてないメソッドをCallした、とエラーになります。(インスタンス自体が生成されていない??) ファイル自体は正常にIncludeされていると思います。(ファイル名を間違ったらエラーになったから) ちなみに、クラスAの記述をメインPHPに記述すると、正常に動きます。 外部ファイルのクラスを正常に動かすにあたって、何かphp.iniあたりの編集が必要なのでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう