質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

940閲覧

一つのクラスに複数のクラスからアクセスする正しい方法が知りたいです。

clothblue

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/08/03 07:31

前提・実現したいこと

下記の物はウィンドウとボタンを表示するだけのプログラムなのですが、新たにTest.javaを作りその中の情報をUIクラスに与えたいときにTest.java内で
UI ui = nwe UI();
ui.createUI(情報);
としたくなるのですが合っていますでしょうか?Gameクラス内でもインスタンス化しているので違う気がしてモヤモヤしています。
正しいやり方などがあればお聞きしたいです。よろしくお願いします。

該当のソースコード

package package01; public class Game { UI ui = new UI(); public static void main(String[] args) { new Game(); } public Game(){ ui.createUI(); } }
package package01; import java.awt.Color; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class UI { JFrame window; JPanel startButtonPanel; JButton startButton; public void createUI() { window = new JFrame(); window.setSize(800,600); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.getContentPane().setBackground(Color.black); window.setLayout(null); startButtonPanel = new JPanel(); startButtonPanel.setBounds(300, 400, 200, 100); startButtonPanel.setBackground(Color.black); startButton = new JButton("start"); startButtonPanel.add(startButton); window.add(startButtonPanel); window.setVisible(true); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/08/03 07:34

そのクラスの情報を共有するのか独立させるかどうかで違います。
clothblue

2020/08/03 07:35

共有する方法を知りたいです。
dodox86

2020/08/03 07:37

往々にして明らかに間違った方法は存在するけど、唯一の正しい方法は無い気が。間違った方法は大抵、見た瞬間に「コレチガウ」感がありますね。
sazi

2020/08/03 08:02 編集

>ui.createUI(情報); >としたくなる とは、 質問のコードをそのように変更するのは正しいアプローチなのか? という問いですか? getter/setterの話のような気もするし・・
guest

回答1

0

ベストアンサー

質問の意味を勘違いしてるかもしれませんが・・・
Testクラスから、GameクラスのUiにアクセスしたいってことなら。
現状は、package01の中からなら何もせずに直接アクセスできます。

java

1// 作成するTestクラスが、package01に属していることが重要(Gameクラスがpackage01なので) 2package package01; 3 4public class Test { 5 public static void main(String[] args) { 6 Game g = new Game(); 7 Ui ui = g.ui; 8 ui.createUI(情報); 9 } 10}

あるクラス内のフィールド(メンバ変数)にアクセスしたい場合、上記のように
可視性を何もつけない(同じパッケージからアクセス可能)かpublicにします。

ただ、これだと何でもできちゃうので、困るという場合は
privateにして、必要な操作だけメソッドを用意します。

java

1public class Game { 2 private UI ui = new UI(); // privateにすることで直接アクセスできないようにする 3 // 必要な操作を公開する 4 void setColor(Color color) { 5 ui.startButtonPanel.setBackground(color); 6 } 7 // UIを直接操作させたいならUIを返すメソッドを用意する 8 public UI getUi() { 9 return ui; 10 } 11}

で、正しい正しくないは何をもって正しいか?を決めてくれないとなんとも・・・
上記のように誰からでもアクセスされては困る(正しくない)なら、可視性をprivateにしてという感じになりますが、

何でもかんでもprivateにする必要はないとは思います。特にGUI系はある程度パッケージ内なら
どこからでもアクセスできるは、よくあるような気がします。

投稿2020/08/04 02:19

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

clothblue

2020/08/04 23:58

質問が曖昧ですみませんでした。細かく教えて頂いてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問