実現したいこと
コンパイルエラーが出る箇所をコメントした時の実行結果が
以下のようになるようにしたいです。
クラスA
クラスA
クラスA
クラスA
クラスB
クラスB
クラスB
クラスA
クラスA
クラスA
クラスA
クラスA
クラスA
クラスD
クラスA
クラスC
クラスC
クラスA
発生している問題・分からないこと
Mainクラスの19,23,27行目でエラーが出ます。
エラーメッセージ
error
1Exception in thread "main" java.lang.Error: Unresolved compilation problems: 2 型 ClassC のメソッド call(ClassA) は引数 () に適用できません 3 型 ClassD のメソッド call(ClassA) は引数 () に適用できません 4 型 ClassE のメソッド call(ClassA) は引数 () に適用できません
該当のソースコード
import package1.ClassA; import package1.ClassB; import package1.ClassC; import package2.ClassD; import package2.ClassE; public class Main { public static void main(String[] args) { // ClassAのメソッドから ClassA a = new ClassA(); a.call(); // クラスAの出力 // ClassBのメソッドから ClassB b = new ClassB(); b.call(); // クラスBの出力 // ClassCのメソッドから ClassC c = new ClassC(); c.call(); // ClassAの出力とクラスCの出力 // ClassDのメソッドから ClassD d = new ClassD(); d.call(); // クラスDの出力 // ClassEのメソッドから ClassE e = new ClassE(); e.call(); // クラスEの出力 } } package package1; public class ClassA { public void call() { display1(); display2(); display3(); display4(); } public void display1() { System.out.println("クラスA"); } protected void display2() { System.out.println("クラスA"); } void display3() { System.out.println("クラスA"); } private void display4() { System.out.println("クラスA"); } } package package1; public class ClassB extends ClassA { public void call() { display1(); // クラスBのdisplay1を呼び出す display2(); // 親クラスのdisplay2を呼び出す display3(); // 親クラスのdisplay3を呼び出す // display4(); // コンパイルエラー } public void display1() { System.out.println("クラスB"); } } package package1; public class ClassC { public void call() { ClassA a = new ClassA(); a.call(); // ClassAのcallメソッドを呼び出す System.out.println("クラスC"); } } package package2; import package1.ClassA; public class ClassD extends ClassA { public void call() { display1(); // publicメソッド // display2(); // コンパイルエラー // display3(); // コンパイルエラー // display4(); // コンパイルエラー System.out.println("クラスD"); } } package package2; import package1.ClassA; public class ClassE { public void call() { ClassA a = new ClassA(); a.display1(); // publicメソッド // a.display2(); // コンパイルエラー // a.display3(); // コンパイルエラー // a.display4(); // コンパイルエラー System.out.println("クラスE"); }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べて書き直しましたがエラーが出てしまいます。
補足
特になし
ClassEの中括弧が不足していた部分は修正しましたが、問題が再現せず、正常に動作します。
ご提示のコードは、本当にその通り書いたものでしょうか(ご提示のコードでは発生し得ないエラーが生じているように見受けられます)。
https://paiza.io/projects/b-azuiWiLcd9Ko6FLdzLaQ
ご回答誠にありがとうございます。
中括弧不足していました。すみません。
もう一度パッケージやクラス作成の所から作り直し、上記のコードを書いたら
正常に動作しました。ありがとうございます。
ただ、今の状態だと実行結果が、
クラスA
クラスA
クラスA
クラスA
クラスB
クラスA
クラスA
クラスA
クラスA
クラスA
クラスA
クラスC
クラスA
クラスD
クラスA
クラスE
ですが、実行結果を以下のように表示したい場合、
どこを修正したらよいか分かりますか?
よろしくお願いいたします。
クラスA
クラスA
クラスA
クラスA
クラスB
クラスB
クラスB
クラスA
クラスA
クラスA
クラスA
クラスA
クラスA
クラスD
クラスA
クラスC
クラスC
クラスA
追加します。
mainから、以下の処理を順番に実行し、動きを確認する。
※コンパイルエラーが発生するものもあるので、 必ず1つずつ確認すること。
ClassAのメソッドから、 ClassAのそれぞれのメソッドにアクセスする。 (同一クラスからのアクセス)
ClassBのメソッドから、 ClassAのそれぞれのメソッドにアクセスする。 (同一パッケージ・子 親へのアクセス)
ClassCのメソッドから、ClassAのそれぞれのメソッドにアクセスする。(同一パッケージ・継承関係のないアクセス)
ClassDのメソッドから、 ClassAのそれぞれのメソッドにアクセスする。(関係のないクラスからのアクセス)
ClassEのメソッドから、 ClassAのそれぞれのメソッドにアクセスする。 (関係のないクラスからのアクセス)
ClassDのメソッドから、ClassCのそれぞれのメソッドにアクセスする。(パッケージ違い・子⇒親へのアクセス)
ClassAのメソッドから、ClassBのそれぞれのメソッドにアクセスする。(同一パッケージ・親子へのアクセス)
ClassCのメソッドから、 ClassDのそれぞれのメソッドにアクセスする。 (パッケージ違い・親⇒子へのアクセス)
> ですが、実行結果を以下のように表示したい場合、
この形に「クラスE」の出力が皆無となってしまっているのですが、それはいいのでしょうか?
(何を目的としてこのような結果を得たいのか、という意図がわからないのでコメントしづらいです)
回答ありがとうございます。
問題文の解析が自分の中で出来ておらずすみません。
もう少し考えてみます。
あなたの回答
tips
プレビュー