- ベストアンサー
クラス名を変えるとコンパイルエラーが発生する理由
- クラス名を変更すると、コンパイルエラーが発生する。
- super_classをOyaに、sub_classをKoとして定義すると、コンパイルエラーが発生する。
- クラス名の変更によって、継承関係やインスタンスの型が変わるため、メソッドの実行や型の判定に影響が出る。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
適当なこと言ってしまいました。失礼。 > Exception in thread "main" java.lang.InstantiationError: Oya APIを見ると「アプリケーションが Java の new 構文を使って abstract クラスやインタフェースのインスタンスを生成しようとしたときにスローされます。」と書いてあります。 Oyaクラスにabstract修飾詞が付いているか、 またはインタフェースとして定義されているのではないでしょうか? (writeの定義で引っかかるはずなのでインタフェースはないと思いますが。。。)
その他の回答 (5)
- Noriwo003
- ベストアンサー率61% (8/13)
(訂正) > No.4さんのおっしゃる様に入力ミスでしょう。 No.2さんのおっしゃる様に入力ミスでしょう。
- Noriwo003
- ベストアンサー率61% (8/13)
No.4さんのおっしゃる様に入力ミスでしょう。 Eclipseを使ってるなら super_classの文字を選択した状態にする ⇒右クリック⇒「リファクタリング」を選択 ⇒「名前変更」⇒「新しい名前」に"Oya"を入力して「終了」 を使うと便利ですよ。
お礼
レスを頂き、ありがとうございます。 自分はEclipseの置換を使って、 super_classをOyaに sub_classをKoに 全部変換しました。 コンパイルエラーの内容から混在はしてないようです。 でも、不思議ですね。 何故通らないのでしょう。
- askaaska
- ベストアンサー率35% (1455/4149)
コンパイルエラーの内容くらい貼りなさいよ。 私エスパーじゃないから。 とりあえず推測かな。 ファイル名が悪いとか そんな理由?
お礼
レスを頂き、ありがとうございます。 コンパイルエラーですが、 Exception in thread "main" java.lang.InstantiationError: Oya at test3.main(test3.java:43) ってでますね。 それで43ステップ目は Oya naru = new Oya("成瀬川なる", 17); の部分です。 これで何か分かりますか。 もう1度宜しくお願い致します。
別に、コンパイルエラーになんてならないが。 どこか、置換忘れの箇所とかがあるんでないかね。 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); } }
お礼
レスを頂き、ありがとうございます。 logger_manさんの書かれたとおりのソースだと思いますが、一度このソースでコンパイルしてみますね。 …………… やはりOyaがどうとかでコンパイルは通りませんでした。 logger_manさんがこれでコンパイルが通ったなら、自分の中のEclipseに問題があるわけですね。 全く何故通らないのでしょうか。
- gau_puzzler
- ベストアンサー率48% (39/81)
その実際に変更したソースを提示してください 直し忘れがあるんだと思います 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; } }
お礼
レスを頂き、ありがとうございます。 以下が変更したソースです。 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); } } これだとコンパイルが通らないんですよ、本当に。 何故だけ物凄く知りたいです。
お礼
再度のレスを頂き、ありがとうございます。 今Eclipseを使用してやっているのですが、以前に抽象クラスでOyaというものを作りました。 そこからOyaというクラス名を思いついたのですが、それがいけなかったみたいですね。 Oya1にしたらコンパイルが通りました。 こういうのは初めての体験でして、でも、気付いて当たり前の事ですし、これからは一層気をつけます。