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

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

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

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1184閲覧

superでコンストラクタが呼び出せない

reuui

総合スコア2

Java

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2020/06/10 15:53

前提・実現したいこと

superで引数を呼び出そうとしているがエラーが出てしまう

発生している問題・エラーメッセージ

コンストラクター呼び出しは、コンストラクター内の最初のステートメントである必要があります

該当のソースコード

java

1package sample4; 2 3class Car 4{ 5 private int num; 6 private double gas; 7 8 public Car() 9 { 10 num = 0; 11 gas = 0.0; 12 System.out.println("車を作成しました"); 13 } 14 public Car(int n, double g) 15 { 16 num = n; 17 gas = g; 18 System.out.println("ナンバー" + num + "ガソリン量" + gas + "の車を作成しました"); 19 } 20 public void setCar(int n, double g) 21 { 22 num = n; 23 gas = g; 24 System.out.println("ナンバーを" + num + "ガソリン量を" + gas + "にしました"); 25 } 26 public void show() 27 { 28 System.out.println("車のナンバーは" + num + "です"); 29 System.out.println("ガソリン量は" + gas + "です"); 30 } 31} 32 33class RacingCar extends Car 34{ 35 private int course; 36 37 public RacingCar() 38 { 39 course = 0; 40 System.out.println("レーシングカーを作成しました"); 41 } 42 public void setCourse(int n, double g, int c) 43 { 44 super(n, g); 45 course = c; 46 System.out.println("コース番号" + course + "にしました"); 47 } 48 public void setCourse(int c) 49 { 50 course = c; 51 System.out.println("コース番号" + course + "にしました"); 52 } 53} 54 55class Sample2 56{ 57 public static void main(String[] args) 58 { 59 RacingCar rccar1 = new RacingCar(1234, 20.5, 5); 60 } 61}

試したこと

サブクラスやスーパークラスの配置を変えてみたりしたがエラーは消えない

補足情報(FW/ツールのバージョンなど)

jdk-14.0.1

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

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

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

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

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

guest

回答2

0

ベストアンサー

コンストラクター呼び出しは、コンストラクター内の最初のステートメントである必要があります

このメッセージのままです。
コンストラクタは、クラスのインスタンスを生成するために、必要なメモリを確保するなど、コードで記載されている以外の処理も行います。
その為、コンストラクタ以外のメソッドからは呼び出せません。

素直に、setcar(n,g)を呼ぶのをお勧めします。

投稿2020/06/10 16:14

YT0014

総合スコア1750

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

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

reuui

2020/06/11 01:44

回答ありがとうございます。つまり、この文章では出力が困難であるということでしょうか? コンストラクター RacingCar(int, double, int) は未定義ですと出てしまいます。 どうすれば解消されるでしょうか?
YT0014

2020/06/11 02:01

>この文章では出力が困難であるということでしょうか? できないのは、コンストラクタ以外からのコンストラクタ呼出しです。 文章の出力は、仕様の問題で、どのような仕様をどのようなコードで実現するかも、別問題です。 以下の点を考慮して、ご自分で、問題を解決してください。 ・クラスCarは、書き換えても良いのか? ・希望の文章は、Car(int,double)でしか出力してはいけないのか? ・クラスRacingCarに、他の引数のコンストラクタを追加しても良いのか?
YT0014

2020/06/11 02:08

>コンストラクター RacingCar(int, double, int) は未定義ですと出てしまいます。 当たり前のことですが、未定義なので定義してください。 >どうすれば解消されるでしょうか? 尋ねてはならない、とは言いませんが、まずは、自分で考えましょう。 このエラーメッセージを読んで、定義が必要なんだ、ということは、おもいつきませんか? 未定義と言われることが納得できませんでしたか? 少なくとも、上記のように、思考の過程なり、疑問点なりを、質問欄を編集して、ご提示ください。 現状では、何も考えずに丸投げしている、と思えるような状況になっております。
reuui

2020/06/11 03:20

すいません。考えが甘かったです。1から書き直したんですが同じようになってしまいます。 extend の単元に入ってから文章にエラーが検出されなくても、適用無しのため実行ができなくて焦ってました。参考書の他の例文も試してみてもうんともいわないので、自分なりにやってみようと思います。 ご指摘ありがとうございました。
YT0014

2020/06/11 04:13

例文も含めて、各行の処理が何を行っているのか?という視点で、コードを読んでみてください。 手間はかかりますが、できるだけ細かくコメントを書き入れるようにしてみてください。まずは、全部のメソッド定義にコメントを追加してみましょう。書けないようなら、理解できていないので、以前の内容を復習してください。 reuuiさんのスキルが向上する一助になれば幸いです。
guest

0

superはコンストラクタ以外には置けないです。
なのでpublic RacingCar(int n, double g)コンストラクタを新しく用意して、
setCourseメソッド内のsupersetCarに変えると上手くいくと思います。

投稿2020/06/10 16:02

kuuote

総合スコア705

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

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

reuui

2020/06/11 01:42

すいません、やはり コンストラクター RacingCar(int, double, int) は未 定義ですと出てしまいます。これはどうすればいいですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問