【发布时间】:2019-01-03 19:00:21
【问题描述】:
例如,如果我有一个接口:
interface Executable {
void execute();
}
您将无法显式实例化它。如果您尝试创建接口 Executable 的新实例,则会收到编译错误,提示“无法实例化 Executable 类型”。
但是,当尝试将接口传递给方法时,我意识到您可以这样做:
class Runner {
public void run(Executable e) {
System.out.println("Executing block of code...");
e.execute();
}
}
public class App {
public static void main(String[] args) {
Runner r = new Runner();
// When passing the Executable type, am I instantiating it?
r.run(new Executable() {
public void execute() {
System.out.println("Executed!");
}
});
}
}
这怎么可能?您不是因为new 关键字而创建了接口Executable 的新实例吗?有什么我不明白的吗?非常感谢一个简短的解释和一些例子!
【问题讨论】:
-
称为匿名类
-
这叫做匿名类声明,不是实例化
标签: java interface instantiation