• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラス名を変えるとコンパイルが通らない)

クラス名を変えるとコンパイルエラーが発生する理由

このQ&Aのポイント
  • クラス名を変更すると、コンパイルエラーが発生する。
  • super_classをOyaに、sub_classをKoとして定義すると、コンパイルエラーが発生する。
  • クラス名の変更によって、継承関係やインスタンスの型が変わるため、メソッドの実行や型の判定に影響が出る。

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

  • ベストアンサー
  • Noriwo003
  • ベストアンサー率61% (8/13)
回答No.6

適当なこと言ってしまいました。失礼。 > Exception in thread "main" java.lang.InstantiationError: Oya APIを見ると「アプリケーションが Java の new 構文を使って abstract クラスやインタフェースのインスタンスを生成しようとしたときにスローされます。」と書いてあります。 Oyaクラスにabstract修飾詞が付いているか、 またはインタフェースとして定義されているのではないでしょうか? (writeの定義で引っかかるはずなのでインタフェースはないと思いますが。。。)

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html
persona
質問者

お礼

再度のレスを頂き、ありがとうございます。 今Eclipseを使用してやっているのですが、以前に抽象クラスでOyaというものを作りました。 そこからOyaというクラス名を思いついたのですが、それがいけなかったみたいですね。 Oya1にしたらコンパイルが通りました。 こういうのは初めての体験でして、でも、気付いて当たり前の事ですし、これからは一層気をつけます。

その他の回答 (5)

  • Noriwo003
  • ベストアンサー率61% (8/13)
回答No.5

(訂正) > No.4さんのおっしゃる様に入力ミスでしょう。 No.2さんのおっしゃる様に入力ミスでしょう。

  • Noriwo003
  • ベストアンサー率61% (8/13)
回答No.4

No.4さんのおっしゃる様に入力ミスでしょう。 Eclipseを使ってるなら super_classの文字を選択した状態にする ⇒右クリック⇒「リファクタリング」を選択 ⇒「名前変更」⇒「新しい名前」に"Oya"を入力して「終了」 を使うと便利ですよ。

persona
質問者

お礼

レスを頂き、ありがとうございます。 自分はEclipseの置換を使って、 super_classをOyaに sub_classをKoに 全部変換しました。 コンパイルエラーの内容から混在はしてないようです。 でも、不思議ですね。 何故通らないのでしょう。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

コンパイルエラーの内容くらい貼りなさいよ。 私エスパーじゃないから。 とりあえず推測かな。 ファイル名が悪いとか そんな理由?

persona
質問者

お礼

レスを頂き、ありがとうございます。 コンパイルエラーですが、 Exception in thread "main" java.lang.InstantiationError: Oya at test3.main(test3.java:43) ってでますね。 それで43ステップ目は Oya naru = new Oya("成瀬川なる", 17); の部分です。 これで何か分かりますか。 もう1度宜しくお願い致します。

noname#94983
noname#94983
回答No.2

別に、コンパイルエラーになんてならないが。 どこか、置換忘れの箇所とかがあるんでないかね。 interface HINA { void write(String str, int age); } class Oya { String name; int age; public void write(String str, int age){ System.out.println(str + "\t" + age); } Oya(String name, int age) { this.name = name; this.age = age; } } class Ko extends Oya implements HINA { public void write(String str , int age) { System.out.println(str + "\t" + age); } Ko(String str , int age) { super(str , age); } } public class test3{ public static void main(String[] args) { Oya naru = new Oya("成瀬川なる", 17); Oya shinobu = new Ko("前原しのぶ", 13); Ko motoko = new Ko("青山素子", 15); if (naru instanceof HINA) naru.write(naru.name, naru.age); if (shinobu instanceof HINA) shinobu.write(shinobu.name, shinobu.age); if (motoko instanceof HINA) motoko.write(motoko.name, motoko.age); } }

persona
質問者

お礼

レスを頂き、ありがとうございます。 logger_manさんの書かれたとおりのソースだと思いますが、一度このソースでコンパイルしてみますね。 …………… やはりOyaがどうとかでコンパイルは通りませんでした。 logger_manさんがこれでコンパイルが通ったなら、自分の中のEclipseに問題があるわけですね。 全く何故通らないのでしょうか。

回答No.1

その実際に変更したソースを提示してください 直し忘れがあるんだと思います class super_class { <=こことか   String name;   int age;   public void write(String str, int age){     System.out.println(str + "\t" + age);   }   super_class(String name, int age) { <=こことか     this.name = name;     this.age = age;   } }

persona
質問者

お礼

レスを頂き、ありがとうございます。 以下が変更したソースです。 interface HINA { void write(String str, int age); } class Oya { String name; int age; public void write(String str, int age){ System.out.println(str + "\t" + age); } Oya(String name, int age) { this.name = name; this.age = age; } } class Ko extends Oya implements HINA { public void write(String str , int age) { System.out.println(str + "\t" + age); } Ko(String str , int age) { super(str , age); } } public class test3 { public static void main(String[] args) { Oya naru = new Oya("成瀬川なる", 17); Oya shinobu = new Ko("前原しのぶ", 13); Ko motoko = new Ko("青山素子", 15); if (naru instanceof HINA) naru.write(naru.name, naru.age); if (shinobu instanceof HINA) shinobu.write(shinobu.name, shinobu.age); if (motoko instanceof HINA) motoko.write(motoko.name, motoko.age); } } これだとコンパイルが通らないんですよ、本当に。 何故だけ物凄く知りたいです。

関連するQ&A