从SCJP问题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. }
选项是,
一个。 woof burble
B中。多个编译错误
℃。编译因错误而失败 在第2行
d。编译因错误而失败 在第3行
电子。编译因错误而失败 第4行
F。编译因错误而失败 第9行
A是正确答案,..
有些机构可以解释一下......
枚举是否可以有构造函数?
答案 0 :(得分:2)
Enum是一个班级。它可以有方法,构造函数,字段......和任何其他类一样。
请注意,当您编写DOG,CAT等时,您正在命名您想要拥有此枚举的命名实例。如果他们有类似声音的参数,你必须提供带参数的适当构造函数。
答案 1 :(得分:2)
是的,枚举是允许的构造函数,但只有枚举常量可以调用它。您无法添加枚举的更多实例。作为一种风格问题,构造函数应该是private
。当然,实例字段通常应为private
,并且在枚举final
中。
另外请注意,您可以获取静态字段并在实例表达式上调用静态方法(即使它们评估为null
)。
答案 2 :(得分:1)
枚举可以有构造函数。枚举实际上就像你的例子中所有枚举选项(CAT,DOG,FISH)的超类一样。
您可以为超类(动物)和单个枚举选项(CAT,DOG,FISH)定义构造函数。枚举选项构造函数可以重载或覆盖超类构造函数。
答案 3 :(得分:1)
是的,枚举可以像其他类一样拥有构造函数和方法以及实例变量。 但是你不能自己调用构造函数,就像你使用常规类一样。 你不能叫一个=新狗(“wooooof”)。 编译器将为您调用构造函数。
这将编译正常,但在第9行,我认为编译器会警告您以非静态方式访问静态字段。 Animal.DOG.sound是“正确的方式”而不是a.DOG.sound。
答案 4 :(得分:0)
只是为了让你知道我上周参加SCJP考试时遇到了很多关于enums的问题。我通常不会使用它们并且没有真正修改它们所以不要认为我在那些特定问题上做得很好 - 尽管我仍然通过了考试:)
我知道每一个考试都是从一个随机的集合中挑选你的问题,但由于某种原因,关于枚举的问题似乎是考试作者的最爱......