【发布时间】:2011-01-21 08:04:24
【问题描述】:
当您编写无法访问的代码时,Java 编译器会报错。例如
public void go()
{
return;
System.out.println("unreachable");
}
但是,当您在无法从任何地方访问的匿名类中定义新方法时,编译器不会抱怨。它允许你这样做,为什么? 例如,
class A
{
public void go()
{
System.out.println("reachable - A");
}
}
class B
{
public static void main(String [] args)
{
A a = new A() {
public void go()
{
System.out.println("reachable - B");
}
public void foo()
{
System.out.println("unreachable - B");
}
};
a.go(); // valid
a.foo(); // invalid, compiler error
}
}
【问题讨论】:
-
你在
new A之后缺少括号()和一个括号};来结束匿名内部类的声明。 -
您的示例代码根本无法编译。请更正。
-
我只是将它复制到 B.java 文件并注释了 a.foo() 行,然后编译并运行它。抱歉,除了 a.foo() 部分,我在代码中看不到任何错误,我已经提到它会导致编译错误。
-
另一种尚未提及的调用该方法的方式是,它可以使用提供
foo方法的A的更新版本运行。
标签: java inner-classes unreachable-code