【发布时间】:2017-08-16 03:32:09
【问题描述】:
我遇到了这个问题:
下面的输出是什么?
1 public class A {
2 public static void main(String[] args){
3 I i = new I() {};
4 System.out.println(I.x + i.getValue() + "" + i);
5 }
6 }
7
8 interface I {
9 int x = 10;
10
11 public default int getValue() {
12 return 5;
13 }
14
15 public default String toString() {
16 return "I";
17 }
18 }
我的想法:
我的第一直觉告诉我 - I i = new I() {}?因此,我们无法实例化接口 - 问题 1。
那我想public default String toString()?覆盖对象类方法?听起来不太好 - 问题 2
可能的答案:
a) 10I
b) 15I
c) 由于第 11 行,编译失败
d) 由于第 15 行,编译失败
e) 由于多个错误导致编译失败
在解释了我的想法后,我选择了错误的答案 E)。正确答案是 D),我也答对了。
我的问题 - 为什么以下陈述有效?
I i = new I() {};
由于添加了“{}”,此语句是否在执行我不理解的操作?据我了解,new 关键字的意思是:实例化。
【问题讨论】:
-
第 11 行和第 15 行分别是什么?
-
使用编译器编译,自己看结果。
-
好吧,
D暗示您对问题 2 的看法是正确的。所以您只需要了解 anonymous inner classes
标签: java object interface java-8