• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのオーバーライドについての質問です。)

Javaのオーバーライドについて:子クラスで親クラスのメソッドを上書きする方法

このQ&Aのポイント
  • Javaのオーバーライドについての質問です。クラスParent04に受け取ったString配列の中身を全て大文字に変換するChangeメソッドが定義されています。クラスParent04を継承するクラスChild04でChangeメソッドをオーバーライドして、String配列の中身を全て小文字に変換するように変更してください。その後、mainメソッドからChangeメソッドを呼び出して、変換後のString配列の要素を全て出力してください。
  • 現在、コマンドプロンプトでコードをコンパイルしようとしていますが、エラーが表示されます。「'.class'がありません」「;がありません」というエラーです。エラーの意味を調べたり、コードを確認したりしましたが、解決策が見つかりません。戻り値と引数の値は合わせていますが、なぜエラーが発生しているのでしょうか?考え方やヒントを教えてください。
  • Javaのオーバーライドでは、子クラスで親クラスのメソッドを上書きすることができます。この質問では、クラスParent04に定義されているChangeメソッドを、クラスChild04でオーバーライドしています。オーバーライドするためには、子クラスで親クラスのメソッドと同じシグネチャ(メソッド名、引数の個数と型)を持つメソッドを定義する必要があります。クラスChild04では、Changeメソッドの中で、String配列の中身をすべて小文字に変換しています。また、mainメソッドからChangeメソッドを呼び出し、変換後のString配列の要素を出力しています。現在、コマンドプロンプトでコードをコンパイルしようとしていますが、エラーが表示されてしまいます。エラーの意味や解決策を教えてください。

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

  • ベストアンサー
  • KSOH
  • ベストアンサー率93% (29/31)
回答No.2

> .classがありません。 > ; がありません メソッドの実引数には文法上「式」を指定しなければなりません。さて、`String[] args`というのは式ではありません。`型名 変数名`というパターンが書けるのはローカル変数宣言、引数宣言、フィールド宣言といったところになります。 「.classがありません」というエラーが出るのはコンパイラーが「式」だと思って`String[]`まで解析した時点で「これは型だよなー」と解釈し「ここには式を書かないといけないのだけど、ここに型がでてきたってことはこの後staticメソッドの呼び出しかstaticフィールドの参照か.classの参照がくるはず...」と思って読み進んだところ`args`というどれにも該当しないものが書かれていたのでとりあえず「.classがないと言っておくか」みたいな理由で出力されているものです。でもこんなエラーのからくりは覚える必要はありません。コンパイル時のエラーはその近辺に文法が正しくない記述があると思って間違いに気付ければいいです。 ちなみに前述の文法を直したとしてもまだコンパイルエラーになるはずです。 ヒントは「staticメソッドとstaticでないメソッドの呼びだし方の違い」です。呼び出し方が間違っているのでコンパイルエラーになります。

その他の回答 (1)

  • sundara
  • ベストアンサー率26% (22/82)
回答No.1

.classがないということは、そもそもコンパイルに成功していない。 > String[] array = ORchild04.Change(String[] args); なにこれ?なんでargsもらうのにString[]なんてつけてるの? >System.out.println(array); これもおかしい。String[] arrayだぜ。 eclipseでデバッガ使いながら調べてごらん

関連するQ&A