0

背景情報 Sierra & Bates, SCJP v6 book からの質問について質問があります。つまり、第 2 章の質問 2 です。与えられた答えは、「コンパイルが失敗する」ということです。しかし、これを neBeans で試したところ、コードはコンパイルされ、エラーなしで実行されました。また、選択肢の 1 つではない "D" の出力も返しました。super() などを挿入する必要性に関して、さまざまなフォーラムでこの同じ質問についていくつかの議論があります。ただし、コンパイルできることを誰も認識していないようです。

私は SCJP の勉強をしていて、すべての問題を netBeans で再現できるわけではないので、これは非常に重要です。その場合、(試験目的で)一部のコードが機能しない場合でも機能すると信じるようになるかもしれません。

参照しやすいようにコードが含まれています。

class Top { 
    public Top(String s) { System.out.print("B"); } 
} 

public class Bottom2 extends Top { 
    public Bottom2(String s) { System.out.print("D"); } 
    public static void main(String [] args) { 
        new Bottom2("C"); 
        System.out.println(" "); 
    }
}
4

1 に答える 1

1

Topにはデフォルト コンストラクターがありません (デフォルト コンストラクターは空の引数 list を持つパブリック コンストラクターです。したがって、 のコンストラクターBottom2はスーパー コンストラクターを明示的に呼び出す (そしてその引数を渡す) 必要がありますが、そうしないため、コンパイルは失敗します。

実際、日食ヘリオスは次のように述べています。

暗黙のスーパー コンストラクター Top() は未定義です。別のコンストラクターを明示的に呼び出す必要があります

javac は次のように述べています。

cannot find symbol
symbol  : constructor Top()
location: class tools.Top
    public Bottom2(String s) { System.out.print("D"); }
                             ^

Netbeans で同じコードを試したことが本当にありますか?

于 2011-04-17T20:35:27.847 に答える