私が取り組んでいる問題セットの問題で「拡張」の問題にかなりの時間を費やしています-意図的に混乱させるように書かれているため、ブロックしているだけだと思います。与えられた問題は次のとおりです。
class A {
int x;
A(int a) {System.out.println(" class A");}
}
class B extends A {
int x;
B() {System.out.println(" class B");}
public static void main (String [] args) {
A a = new B();
}
}
コンパイルすると、次のエラーがコンソールから追い出されます。
cannot find symbol
symbol : constructor A()
location: class A
B() {System.out.println(" class B");}
^
クラスAに触れずにクラスBでこのエラーを修正できるはずです.明らかに何かが欠けています.
これまでのところ、私は試しました:
- B() の前に void を投げる - 同じエラー。
- B() を A(int a) にする - 後者は無効なメソッド宣言エラーで返されます (その前に void を追加すると、元の「シンボルが見つかりません」エラーに戻ります)
- B() B(int a) の作成 - 同じエラーに加えて、B() 宣言を破棄したため、追加の「シンボルが見つかりません」というエラーがスローされます。
- クラス B を作成して A をクラス B に拡張すると、A(int A) が拡張されます - 9 つのエラーがスローされます。明らかに答えではありません。
- A のクラス名を Apple に変更して、答えが得られるかどうかを確認します。これにより、Apple クラスの A(int a) の前に void を追加する必要がありますが、これはできません。
ここで何が欠けているのですか?これは厳密には高度なクラスではないため、それほど複雑なことはできませんが、これは私を完全に狂気にさせます. どんな助けでも大歓迎です。