0

SCJP Questions PDFブックから、この質問がありました。

1. enum Animals {
2. DOG("woof"), CAT("meow"), FISH("burble");
3. String sound;
4. Animals(String s) { sound = s; }
5. }
6. class TestEnum {
7. static Animals a;
8. public static void main(String[] args) {
9. System.out.println(a.DOG.sound + " " + a.FISH.sound);
10. }
11. }

オプションは、

A.ウーフバーブル

B.複数のコンパイルエラー

C.2行目のエラーが原因でコンパイルが失敗する

D.3行目のエラーが原因でコンパイルが失敗する

E. 4行目のエラーが原因で、コンパイルが失敗する

F. 9行目のエラーが原因で、コンパイルが失敗する

Aは正解です。

誰かがこれを説明できますか。

列挙型がコンストラクターを持つことができるかどうか?

4

5 に答える 5

2

はい、列挙型はコンストラクターとして使用できますが、列挙型定数のみがそれを呼び出すことができます。列挙型のインスタンスをこれ以上追加することはできません。スタイルの問題として、コンストラクターはprivate. そしてもちろん、インスタンス フィールドは通常private、 および enum である必要がありますfinal

また、静的フィールドを取得し、インスタンス式で静的メソッドを呼び出すことができることにも注意してください (それらが に評価された場合でもnull)。

于 2011-03-15T14:12:25.430 に答える
2

列挙型はクラスです。メソッド、コンストラクター、フィールドなどを他のクラスと同様に持つことができます。

DOG、CAT などを記述するときは、この列挙型のどの名前付きインスタンスを持ちたいかを指定していることに注意してください。サウンドのようなパラメーターがある場合は、適切なコンストラクターにパラメーターを指定する必要があります。

于 2011-03-15T14:10:49.803 に答える
1

列挙型にはコンストラクターを含めることができます。列挙型は、実際には、例のすべての列挙型オプション(CAT、DOG、FISH)のスーパークラスのように機能します。

スーパークラス(Animals)と個々の列挙型オプション(CAT、DOG、FISH)の両方のコンストラクターを定義できます。列挙型オプションコンストラクターは、スーパークラスコンストラクターをオーバーロードまたはオーバーライドできます。

于 2011-03-15T14:14:23.040 に答える
1

はい、列挙型には、他のクラスと同様に、コンストラクターとメソッドとインスタンス変数を含めることができます。ただし、通常のクラスのようにコンストラクターを自分で呼び出すことはできません。a= new Dog("wooooof") を呼び出すことはできません。コンストラクターは、コンパイラーによって呼び出されます。

これは正常にコンパイルされますが、9 行目で、静的フィールドに非静的な方法でアクセスしていることをコンパイラが警告すると思います。Animal.DOG.sound は「適切な方法」であり、a.DOG.sound ではありません。

于 2011-03-15T14:18:09.213 に答える
0

先週 SCJP 試験を受験したとき、enum に関するかなりの数の質問に遭遇したことをお知らせします。私は通常それらを使用せず、実際にそれらを修正していなかったので、それらの特定の質問でそれほどうまくいったとは思いません-それでも試験に合格しました:)

すべての試験でランダムなセットから問題が選択されることは知っていますが、何らかの理由で、列挙型の問題が試験作成者のお気に入りのようです...

于 2011-04-26T12:42:48.160 に答える