• 締切済み

java内部クラスについて

内部クラスがstaticな場合 public class mainclass{   public static void main(String[] args) {     innerClass ic = new innerClass();   }   public static class innerClass{   } } と innerClass ic = new innerClass();で動作しnewできますが、 class が static でない場合どういう書き方になりますでしょうか? 色々と理解不足がある状況だとおもいますがよろしくお願いいたします。

  • Java
  • 回答数5
  • ありがとう数5

みんなの回答

回答No.5

基本は「public static」は無しにして、メイン・クラスの外に出す、どうしてもpublicが必要なが必要な場合は別ファイルを作る、と言う感じでしょうか。

muuming2001
質問者

お礼

よくよく考えたら内部クラスではstatic無しに実現できないですね。 ありがとうございました。

回答No.4

「回答No.1」はインナー・クラスにしないと言う事です。

muuming2001
質問者

お礼

よくよく考えたら内部クラスではstatic無しに実現できないですね。 ありがとうございました。

回答No.3

>public class mainclass{ >static dynamic d; >public static void main(String[] args) { >d = new dynamic(); >} >} ↑「static dynamic d;」の定義は必ず「main(~)」メソッドの外で定義して下さい。

muuming2001
質問者

お礼

よくよく考えたら内部クラスではstatic無しに実現できないですね。 ありがとうございました。

回答No.2

冗長的な感はありますが起動用クラスを作れば、別途ファイルを作る必要はありません(下記参照)。 mainメソッド内は「d = new dynamic();」だけにして、「dynamic( )」コンストラクターにプログラムを記述して下さい(dynamicの名前は分かりやすければ何でも良いです) public class mainclass{ static dynamic d; public static void main(String[] args) { d = new dynamic(); } } class dynamic{ dynamic( ){ innerClass ic = new innerClass(); } public class innerClass{ } }

muuming2001
質問者

お礼

よくよく考えたら内部クラスではstatic無しに実現できないですね。 ありがとうございました。

回答No.1

「public static」を消して、mainclassの外に出して下さい(下記参照) 「public」を残したい場合は「innerClass.java」と言うファイルを作って、そのファイルに「innerClass」を移動して下さい public class mainclass{ public static void main(String[] args) { innerClass ic = new innerClass(); } } class innerClass{ }

muuming2001
質問者

お礼

よくよく考えたら内部クラスではstatic無しに実現できないですね。 ありがとうございました。

関連するQ&A

  • mainクラスのpublicの意味を教えて下さい

     お早う御座います、JAVA初心者です、宜しくお願いします。  main クラスの public をコメントアウトしてもエラーもなく走ります。  これは、「public static void main(String[] args)」を持っているクラスを自動的に「main クラス」と判断しているということでしょうか。 ============================================================ class Sub { void disp() { System.out.println(" a "); } } /*public*/ class Main { public static void main(String[] args) { Sub s = new Sub(); s.disp(); } }

    • ベストアンサー
    • Java
  • 内部クラス?のエラー

    内部クラス?のエラー  今晩は、JAVA初心者です、宜しくお願い致します。  下のようなプログラムを書いてやりました。  <A>のように全体のプログラムを1つのクラスの中に別のクラスを入れる(内部クラス?)と、 「アクセス可能な型Testのエンクロージング・インスタンスがありません。  型Testのエンクロージング・インスタンスで割り振りを限定する必要があります。  (例えばx.new A()でxはテストのインスタンス)」というエラーがでます。  しかし、<B>のように別のクラスにすると、エラーは出ません。  この原因がよくわかりません。 ==================================================================== <A> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } } ==================================================================== <B> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } ====================================================================

    • ベストアンサー
    • Java
  • 内部クラスのインスタンスを動的に取得したい

    class test {   public test(String str){     try{       Class c = Class.forName("test$TESTSUB" + str);       c.newInstance();  // ココでエラー     }catch(Exception e){       e.printStackTrace();     }   }   public static void main(String[] args){     new test(args[0]);   }   class TESTSUB1 {     public TESTSUB1(){       System.out.println("# " + toString());     }   }   class TESTSUB2 {     public TESTSUB2(){       System.out.println("# " + toString());     }   } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

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

    • ベストアンサー
    • Java
  • クラスメソッドのみのクラスのオブジェクト生成は不可??

    あるテキストの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
  • クラスについての質問です!!

    本に下のような説明があったのですが、ここで出てくる「メンバ」という言葉がわかりません。 これはどういう意味合いなのでしょうか? よろしくお願いします。 ――――――――――――――――――――――――――― public class JsMsg1{ public static void main (String args[ ]) { ・・・ } } というプログラムはJsMsgというクラスがあり、メンバとしてmain()メソッドがあり、フィールドはないというクラス構成をしています。

    • ベストアンサー
    • Java
  • mainの中に、mainを含んでいる場合の動作が分かりません

    class Test{ public static void main(String args[]){ ObjectVector vect = new ObjectVector(); vect.at(0, "HogeHoge"); vect.at(1, new Test()); String str1 = (String)vect.at(0); String str2 = (String)vect.at(1); } } このサンプルプログラムで、「Testクラスのインスタンス」がObjectVectorに入っているのですが、Testクラスはmain()を含んでいるのでmainの中に、mainを含んでいる場合の動作が分かりません。教えてください。

    • ベストアンサー
    • Java
  • staticつきのインナークラスのインスタンスについて

    以下のようにTestクラス内にstaticなSIクラスを作成しました。 SIクラスのmethodSI()を呼び出す際に、 ( ( new Test() ).new SI() ).methodSI(); のように呼び出しを行おうとすると、エラーになります。 その原因を教えてください。 public class Test{   static class SI{     void methodSI(){       System.out.println( "method si" );     }   }   public static void main( String args[] ){ //次の行↓     ( ( new Test() ).new SI() ).methodSI(); //以下は全て成功します。     (new Test()).SI();     ( new Test.SI() ).methodSI();     ( new SI() ).methodSI();   } }

  • publicクラス

    クラスの修飾子にpublicをつける理由を教えて下さい。 さらに、なにも修飾子をつけなときは 同一パッケージ(ファイル)内からでしかアクセスできないはずですよね? Test.javaとBase.javaを以下のように定義します。 class Test { public static void main(String[] args) { Base b = new Base(); } } class Base { public void show() { System.out.println("hello!"); } } この2つのファイルは同じディレクトリにあります。 public修飾子をつけていないにも関わらず、なぜインスタンス化ができるのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • クラス名

    JAVAの初心者です。 今実行しているクラスのクラス名を求めたいのですが うまくいかず困っております。 public class Person {   public static void main(String args[]);   {     String classname;     classname = this.class.getClass().getName();     System.out.println(classname);   } } イメージ的にはこんな感じなのかなと思ってやってみたのですが、 どうやら違うみたいです。どうぞご教授よろしくおねがいします。

    • ベストアンサー
    • Java