• ベストアンサー

Javaわからない

この問題で質問です。 Javaです 2行目に引数ありのコンストラクタを定義してるから、デフォルトコンストラクタが追加できなくてコンパイルエラーになるという解釈でいいですか?

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

  • ベストアンサー
回答No.1

しばらく回答がついてませんね。 >デフォルトコンストラクタが追加できなくてコンパイルエラーになるという解釈でいいですか? およそそれでいいと思います。 すでに、別のコンストラクタがいるので、 SuperClass() {} が作られていないので。 super() -> SuperClass::Superclass(); が見つからないということでエラーになりますからね。 動かすのが目的なら、 public SuperClass() {} を入れるか、 SubClassのコンストラクタに、 super(String val);を入れれば動作はしますね。 #SuperClassのコンストラクタと同じ形式ならなんでもOK ってことですね。 しばらく、JAVAを使ってなかったんですが、 この仕様、前から違和感は感じてましたよ。

minutes01
質問者

お礼

ありがとうございます!✨

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++の規格

    デフォルト引数は、関数の宣言部、または定義部の いずれかで与えることができると思うのですが、 VC6sp6で +-------------------------------+ class tmp{ int m_x; public: tmp(int x); }; tmp::tmp(int x=0) : m_x(x){} +-------------------------------+ とすると、「デフォルトコンストラクタがない」と、エラーになります。 (因みにBCC551ではコンパイルできます) また、デフォルトコンストラクタを追加すると、 「オーバーロード関数の呼び出しが解決できない」というエラーになります。 前者のエラーの原因は、コンパイラ エラー C2512を読めば理解できますし、 後者の言うことも納得できます。 ここで疑問です。 (1) デフォルト引数はどこで与えることができるか? (2) デフォルトコンストラクタは、ユーザ定義コンストラクタがある場合は、 必ず用意しなければならないか?(エラーc2512) C++の規格ではどうなっているのでしょうか? よろしくお願いします。

  • C++変数宣言時のコンストラクタについて

    Java開発をこれまでやってきたのですが、 C++を学ぼうとしています。 C++では下記のように宣言した場合hogeは インスタンスになり、Hogeクラスのコンストラクタが呼ばれるようなのですが、 Hoge hoge; Hogeクラスのコンストラクタが下記のような引数を持つものしか定義されていなかった場合は どの様な振る舞いをするのでしょうか? Hoge(int num); Javaでは引数の有るコンストラクタしか宣言しなかった場合はデフォルトコンストラクタは 作られなかったと思うのですが、c++では引数のないデフォルトコンストラクタができてるのでしょうか? また、デフォルトコンストラクタが出来ていなかった場合、 Hoge hoge; というようにプリミティブ型のような変数宣言の仕方で引数有りのコンストラクタを呼ぶことは出来るのでしょうか?

  • じゃヴぁ

    class Demo{   String title;   public Demo(){}   public Demo(String t){title=t;}   public void showTitle(){System.out.println("Title is" + title);} } class DerivedDemo extends Demo{   public void setTitle(String tt){title = tt;} } class DerivedDemoApp {   public static void main(String args[]){     DerivedDemo dd = new DerivedDemo();     dd.showTitle();   } } このようなプログラムなんですが、 このDemoの引数なしコンストラクタを削除するとコンパイルエラーになります。 で、なぜエラーになるかという説明なのですが、テキストによると 「引数なしのコンストラクタが無い場合、super()が挿入される(空のコンストラクタという意味だと思います)Demoクラスを拡張しているDerivedDemoクラスにもコンストラクタが無いためこちらもsuper()を挿入します。しかしここでコンストラクタの連鎖の観点からDerivedDemoクラスのスーパークラスであるDemoクラスには引数の無いコンストラクタが定義されていないためコンパイルエラーとなる」 となっています。 しかし、ここで引数ありのコンストラクタをコメントアウトしてみると・・・なんとコンパイルは通ります。 すると、この説明の「連鎖してるから、コンストラクタの定義がいる」という説明はちょっと違うような気がします。 (1)引数なしのコンストラクタが定義されていない場合、なぜコンパイルエラーになるのでしょう? (2)このテキストの説明は正しいですか?? よろしくお願いします

    • ベストアンサー
    • Java
  • 整数xxxが大き過ぎますというエラーメッセージ(Java)

    最近javaを始めた者です。 javaの初歩的なプログラミングなのですが、long型の変数を定義して例えば10個の数字1234567890をその変数に代入してやるとエラーなくコンパイルされるのですが、 11個以上の数字、例えば12345678900を代入してコンパイルしようとすると質問タイトルのようなエラーメッセージが表示されてしまいます。 long型の変数を使えば11個の数字なら問題なく代入できると理解しているのですが、これは間違っているのでしょうか。 エラーがでる理由がわからなくて困っています。このエラーについて、また、どのようにすれば11個以上の数字が代入できるのか教えてください。お願いします。

    • ベストアンサー
    • Java
  • java コンパイルエラー

    java コンパイルエラー java 初心者です。 簡単なプログラムを作りながら練習していたのですが、Exceptionクラスを継承して新しい例外を作る以下のプログラムで、コンパイルエラーとなり、解決できません。 class NewException extends Exception{ public NewException(){ super("エラー"); } } これを javac でコンパイルすると、 NewException.java:3: シンボルを見つけられません。 シンボル: コンストラクタ Exception(java.lang.String) 場所  : Exception の クラス super("エラー"); ^ エラー1個 と言われます。 これを読むと「Exception には String を引数にとるコンストラクタはないよ」と言われているように思えるのですが、そんなはずないのでは。。 もし原因がお分かりの方がいらしたら、ご教示いただけるとありがたいです。

    • ベストアンサー
    • Java
  • コンストラクタを使用したJavaのコンパイルがうまくいかない

    質問内容は、タイトル通りなのですが、 まず、元になるコンストラクタを使用したクラスのソースを以下に書きます。 class test1{ test1(){ System.out.println("コンストラクタ完了"); } } これをtest1.javaという形でコンパイルも終了し、 次に以下のようなソースを書いたstt1.javaを作りました。 class stt1{ public static void main(String[] args){ test1 t0; t0 = new test1(); } } これをコンパイルしようとしたのですが、 シンボルが見つけられないというエラーが出てしまいました。 シンボル:クラス test1 場所:stt1のクラス と出ていました。 現状として、解決方法をネットなどで調べたのですが問題がどこにあるのか分からない状態です。 どなたか詳しい方がいましたら教えていただけると幸いです。

  • 継承における暗黙のデフォルトコンストラクター

    ”継承の際、スーパークラスで引数なしのコンストラクターが省略せずにきちんと記述されるなら、そのサブクラスでコンストラクターを記述しなくても、スーパークラスの引数なしのコンストラクターが受け継がれるためコンパイルエラーがおきない。”のは分かりますが”スーパークラスで引数なしのコンストラクターが省略され、かつサブクラスでコンストラクターを省略した場合”はなぜコンパイルエラーがおきるのでしょうか? 暗黙の内にスーパークラスにコンストラクターが生成され、それがサブクラスに受け継がれることは出来ないのでしょうか? 宜しく願います。

  • 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)'は引数()に適用出来ません  } }

    • ベストアンサー
    • Java
  • CLASSPATHを設定→エラー!!??

    Main.java Sub.java を作りました。 デフォルトの状態(CLASSPATHに何も設定していない状態)で javac Main.java とすると問題なくコンパイルできるのですが・・・しかし、   export CLASSPATH=.:~/myclasses などのように、CLASSPATH を設定すると、「シンボルを解釈処理出来ません」というコンパイルエラーが出ます。 なぜでしょうか? CLASSPATH に カレントディレクトリを設定したにもかかわらず、Main.java Sub.javaがあるディレクトリでコンパイルしてもエラーが出ます。 ちなみに、   export CLASSPATH= のように、CLASSPATHを空にすると、またコンパイルが通るようになります。

    • ベストアンサー
    • Java
  • explicitの定義は?

    C++においてexplicitについて調べると explicit <エクスプリシット>  「明示的」  引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語のキーワード。  クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。  そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。 となっていました 「クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。」 のところが分かりません 具体例で説明してください 例えば template<class CharType,class Attr=char_traits<CharType>, Class Allocator=allocator<T> >class basic_string クラスのコンストラクタが explicit basic_string(const Allocator &a=Allocator()); ですがこのケースについて説明していただければ幸いです