这段代码是如何工作的,我感到很困惑....
package com.servletpack.examples;
interface check {
public void message();
}
public class Interface {
public static void main(String[] args) {
try {
check t = new check() {//how????????????????
public void message() {
System.out.println("Method defined in the interface");
}
};
t.message();
} catch (Exception ex) {
System.out.println("" + ex.getMessage());
}
}
}
答案 0 :(得分:23)
使用该语法,您可以创建anonymous class,这是完全合法的。
在内部,匿名类被编译为自己的类,称为EnclosingClass$n
,其中封闭类的名称在$
符号之前。并且每增加一个匿名类增加n
。这意味着正在创建以下类:
class Interface$1 implements check {
public void message() {
System.out.println("Method defined in the interface");
}
}
然后,main
中的代码编译为在内部使用新定义的匿名类:
check t = new Interface$1();
t.message();
答案 1 :(得分:5)
您正在创建实现接口检查的anonymous class实例(即时)。
答案 2 :(得分:3)
这是匿名课程。您的检查类是一个界面。匿名类动态定义给定接口的实现。因此,它可以帮助您避免为Interface的实现创建单独的类。只有当您知道在代码中的任何其他位置永远不需要此实现时,此方法才有用。
希望这个解释有所帮助!!
答案 3 :(得分:2)
您的接口引用可以包含实现类的对象。您正在实现一个匿名类并将其分配给接口的引用,这在JAVA中绝对合法。