• 締切済み

サブクラスからメインメソッドの値を参照するとき

サブクラスからメインのメソッドを参照する時にメインプログラムが二重起動してしまってどうしたらいいのかわかりません。 プログラムは メインクラスが public class MainProg{ 初期定義など public MainProg() {    プログラム中身 } public String Month{ return A; } public static void main(String [] args) { new MainProg(); } } サブクラスが public class Transmission{        一部省略 MainProg main = new MainProg(); String Month = main.Month(); } このようになっているんですが メインクラスで使用している値をサブクラスで参照しようとしたときにメインクラスがもう一度呼び出されてしまいます。 どのようにしたらいろいろ操作してみたんですが、どうにも解決法がわかりません。 お願いします。

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

・ まずそれぞれ一箇所ずつ訂正してみてください。 ---------------------------------------------------------------------------- // OKが押されたときに別のクラスを呼ぶ public void actionPerformed(ActionEvent e) { Sabu A = new Sabu(); // A.sabu(); } ---------------------------------------------------------------------------- public class Sabu { public void Sabu() { // public void sabu() { Test a = new Test(); } } ---------------------------------------------------------------------------- public void Sabu() {}は、コンストラクタといいますが、紛らわしいので   // public void sabu() { は、記述してはいけません。メソッドになります。 ---------------------------------------------------------------------------- ・ もう一度、コンストラクタとメソッドの違いと利用法を確認してください。 ・ 次に    >>>サブクラスからメインのメソッドを参照する   には、 public class Sabu extends Test {   とかいて、メインTestのメソッドを利用するのが普通です。 ----------------------------------------------------------------------------

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

Javaでは、 TransmissionがMainProgのサブクラスのとき    public class Transmission extends MainProg { MainProgがTransmissionのサブクラスのとき    public class MainProg extends Transmission { のように書くはじめる必要があります。 情報が少なすぎると思われますので、より詳しい情報をだして皆さんのアドバイスを受けたほうがいいでしょう。

rx_93_v
質問者

補足

すみません、サブクラスについて間違ってました。 たとえば、OKのボタンを押すと別のクラスを呼ぶプログラムで メインクラスが class Test extends JFrame implements ActionListener { private static final long serialVersionUID = 1; Test() { //OKのボタンを配置するフレーム JButton b1 = new JButton("OK"); b1.addActionListener(this); getContentPane().add(b1); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("JButtonTest"); setSize(200, 100); setVisible(true); } //OKが押されたときに別のクラスを呼ぶ public void actionPerformed(ActionEvent e) { Sabu A = new Sabu(); A.sabu(); } public static void main(String[] args) { new Test(); } } 別のクラスが public class Sabu { public void sabu(){ Test a = new Test(); } } だとしたとき、OKボタンを押したときに別クラスに命令をさせたいんです。 別クラスでメインのクラスの値などを参照しようとしたとき、定義の部分で2個目のウィンドウが出てしまうのがなぜかわからないです。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

Transmissionのコンストラクタが引数としてMainProgのインスタンスをもらえばよいのでは?。要求とコード構造の全貌が分からないので、やまかんですが。

rx_93_v
質問者

補足

たぶん、初歩的なところが間違ってるとは思うんですが、 別クラスで メインクラス A = new メインクラス(); とすると、メインクラスが二重起動するのがならないようにしたいんです

関連するQ&A

  • メインメソッドの記述について

    メインメソッドを記述する際に、   public static void main(String[] args){     ~~~~~~~~~~~~~   } と書くと思いますが、なぜpublicを付けなければならないのでしょうか? 簡単に考えるために、1つのクラスのみで実行してみたのですがやはりpublicをつけないとエラーになってしまします。 1つのクラスしかないので、どこからも参照されないからpublicでなくても良いと思ったのですが・・・ ちなみに以下の様なとても簡単なもので考えました。 class E_1{ static void main(String[] args){ System.out.println("実験です"); } }

  • メインメソッドのstatic

    javaでstaticは静的という意味があると思うのですがメインメソッドにも使われていますよね? public static void main(String[] args) publicはどこからでもアクセスできるという意味だったと思うのですが メインメソッドにstaticがついている意味などはあるのでしょうか? 素朴な疑問です。

    • ベストアンサー
    • Java
  • メインメソッド無しでJavaを実行する方法

    Javaにメインメソッドってあるじゃん。public static void main(string[] args){;}でお馴染みのアレです。 Javaを実行するには、javaコマンドの引数に.classファイルのファイル名を指定するよね。んで、その.classファイルにメインメソッドを含んでいる必要があって、Javaを実行するにはメインメソッドが必須だそうです。このように、参考書やWEBなどあちこちに書いてあります。 しかし、メインメソッド必須というのは、厳密には間違いなんだそうです。メインメソッドが無くてもJavaを動かす裏ワザがあると、↓のブログに書いてありました。(基本はメインメソッドだとは思うのですが) http://blogs.wankuma.com/kacchan6/archive/2007/07/24/86663.aspx ここにプログラムがザックリ書いてあったのですが、本当に動くんですか? public class MimeticMain{ static boolean init = caller(); public static boolean caller(){ System.out.println("main()が無くても動く"); return true; } } -- これを動かすと、「main()が無くても動く」と表示するんですかね。私がやると、エラーになっちゃったのですが。 エラー: メイン・メソッドがクラスMimeticMainで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) ーー あと、staticイニシャライザーを使うと、メインメソッドが無くても動くと、冒頭に書いてあります。自分なりに調べて書いてみたんですが、エラーですね。 public class MimeticMain{ public static void mMain(){System.out.println("main()が無くても動く");} static{mMain();} } メインメソッドが無くても動くって、本当?そのコードを書けますか?10行50ワード以下の簡単なプログラムで良いと思いますが。 2007年のブログらしく、当時の古いバージョンのJavaならば動くのかしら?Javaも仕様がどんどん変わっていて、バージョンアップするとメインメソッド必須になったのかしら?

    • ベストアンサー
    • Java
  • サブクラスで.newInstance()でインスタンス化できない

    以下のようにClass.forNameで取得したクラスをインスタンス化 しようとしていますが、できません サブクラスは.newInstance()でインスタンス化できないのでしょうか? 代替の方法はありますか? ーーーーーーーーーーーーーーーー public class test4121 { public static void main(String[] args) throws Throwable { new test4121(); } public test4121() throws Throwable { //これは実行できるが test4121_2 test = new test4121_2(); //これはできない Class.forName("test4121$test4121_2").newInstance(); } class test4121_2{ } } ーーーーーーーーーーーーーーーー

  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

    mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつけなければならないのでしょうか? そのような記述を見掛けたのですが、もしこれが正しいという場合、 それは、なぜなのでしょう? java初心者ですが、どうぞ宜しくお願いいたします。 class MainClass{  //先頭のstaticに注目  static void sub(){   ~~  }  //mainメソッド  public static void main(String[] args){   sub();  } }

    • ベストアンサー
    • Java
  • 参照・値渡しについて

    下記プログラム(ソース1)を実行すると「1」という値が出力されます。しかし、2行目をprivate static int a;とすると「0」という値が出力されます。 オブジェクトは参照渡しで基本データ型は値渡しと思ったのですが、2行目の値をString型で行ったところ全く変更されていない値が出力されました。(ソース2) 一体どういうことでしょうか? 回答のほどよろしくお願い致します。 (ソース1) public class X{ private static int a[] = new int[1]; public static void main(String []args){ modify(a); System.out.println(a[0]); } public static void modify(int a[]){ a[0]++; } } (ソース2) public class X{ static String a = "a"; public static void main(String []args){ modify(a); System.out.println(a); } public static void modify(String a){ a = "b"; } }

    • ベストアンサー
    • Java
  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • クラスメソッドのみのクラスのオブジェクト生成は不可??

    あるテキストのjavaの問題です。 public class Draw{   static void pixel(int x,int y){     /*座標(x、y)に点を描画*/   }   static void line(int x1,int y1,int x2,int y2){     /*座標(x1、y1)~(x2、y2)に線を引く*/   } } で、これを実行するための以下のようなクラス public class TestDraw{ <ここに入力> } という問題なのですが2つまでは絞れたのですが、 (1) public static void main(String args[]){   Draw d = new Draw().line(10,10,20,30); } ↑× (2) public static void main(String args[]){   Draw.line(10,10,20,30); } ↑○ (2)はlineメソッドがstaticメソッドだからオブジェクト生成しなくても良い、ということなんですが (1)も正解のような気がするのですが・・・ 解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。 どうもいまいち理解できません。 クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない ということなのでしょうか? それからちなみに、public classって2つ記述できないんではありませんでしたか?

    • ベストアンサー
    • Java
  • あれ?

    すいません。 長い間、 疑問に思ってたことがあるんですけれども、 (1) import javax.swing.*; class Sample {  public static void main (String args[])  {   ........   Aメソッド()  } } (2) import javax.swing.*; class Sample extends aiueo {   public static void main (String args[])  {   ........   Aメソッド()  } } (3) class Sample extends aiueo {  public static void main (String args[])  {    ........   Aメソッド()  } } の違いが、 考えれば考えるほどわからなくなってきました。 パッケージと継承の関係について、 どうやら理解できていないみたいです。 どなたか分かりやすく教えてください。 よろしくお願いします。 (注) Aメソッドはaiueoクラスのメソッドとし、 aiueoクラスはjavax.swingパッケージに入っているものとします。

    • ベストアンサー
    • Java
  • サブクラスでセッターを呼び出す

    java初心者です。 以下のようなソースコードで、コンパイルしたらエラーが出ました。 サブクラスのsetterのところでエラーが出たんですが、 サブクラスでスーパークラスのメソッドは呼び出せないんでしょうか? それとも他に間違いがあるんでしょうか? class rensyu { private int x; rensyu(){ x=this.x; } int getX(){ return x; } void setX(int m){ this.x = m; } } class rensyu2 extends rensyu{ private rensyu[] A; rensyu2(){ A = new rensyu[100]; } int getter(int i){ return A[i].getX(); } void setter(int x,int i){ A[i].setX(x); } } class rensyuTester{ public static void main(String[] args) { rensyu2 A = new rensyu2(); A.setter(1,0); A.setter(2,1); System.out.println(A.getter(0) +" "+ A.getter(1)); } }

    • ベストアンサー
    • Java

専門家に質問してみよう