• ベストアンサー

Java初心者です、エラーの意味が理解できません

今晩は。Java初心者です、宜しくお願いします。 下のようなコードを書きましたが、 「コンストラクタ'sub(int)'は未定義です」、 「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。 エラーの意味が理解できません。 1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 2.Subには自動的にコンストラクタが生成されないのでしょうか。   されないとすれば、どの部分の書き方が悪いのでしょうか。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 それとも全てコンストラクタの生成が原因なのでしょうか。 ========================================================================= class Sub { void disp(int a) { System.out.println("a = " + a ); } } public class クラス { public static void main(String[] args) { Sub s = new Sub(10); //コンストラクタ'sub(int)'は未定義です s.disp();     //型subのメソッド'disp(int)'は引数()に適用出来ません  } }

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

  • ベストアンサー
  • _yasuo
  • ベストアンサー率41% (16/39)
回答No.3

1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 →問題ないです  ただし、実現の方法がちょっと違います 2.Subには自動的にコンストラクタが生成されないのでしょうか。 →されます。自動的に生成されるコンストラクタは、”デフォルトコンストラクタ”と呼ばれます。この場合の”デフォルトコンストラクタ”は、”public Sub()”となり、引数がないコンストラクタです(引数がないコンストラクタをデフォルトコンストラクタと呼び出ます)。   されないとすれば、どの部分の書き方が悪いのでしょうか。 →mainの、Sub s = new sub(10)に対応するコンストラクタを書く必要があります。  class sub { public Sub(int a){ } } と書くことで、エラーは解消されます。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 →はい。文法エラーですね。 void disp(int a) { System.out.println("a = " + a ); } というメソッドを定義しているため、必ず、”s.disp(intの値);”で呼び出さないといけません。 ”s.disp()”で、呼び出したい場合は、 void disp(){ ・・・ } の形式で書く必要があります。

htgo
質問者

お礼

みなさん、有難う御座います、やはり基本がわかってないということがよくわかりました。 回答有難うございました。

その他の回答 (2)

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

#1さんの仰るように、ただの書き間違いならいいのですが…何か変な覚え方をされていませんか? > コンストラクタ'sub(int)'は未定義です このエラーは文字通り、int型の引数を取るコンストラクタがSubクラスで定義されていない、という意味です。 コンストラクタを複数作れるのはご存知ですか? あるいはコンストラクタの作り方は分かりますか? コンストラクタを明示的に定義しなかった場合どうなるかは? そのあたりの基本を抑えていたら、このエラーの意味も分かると思うのですが。 ちなみに、自動的に引数ありのコンストラクタが作られる、などということはないです。 > 型subのメソッド'disp(int)'は引数()に適用出来ません これは、Subクラスで定義されているのはint型の引数を取るdispという名前のメソッドだけなので、引数なしで呼ばれても使えませんよ、と言っているのです。 int型の引数を使うメソッドを定義したら、自然とコンストラクタが作られるのでそこに値を渡せばよい、みたいな覚え方をしていませんか? 参考書等の、メソッドの宣言の仕方(使い方)、コンストラクタの宣言の仕方(使い方)、の章を読んで、理解を深めた方がよいと思います。

回答No.1

Sub s = new Sub(10); s.disp(); ではなく Sub s = new Sub(); s.disp(10); ではないですか?

関連するQ&A