小编典典
1)为什么我们能够直接从接口创建匿名内部类,而不必通过实现该接口的类创建一个匿名内部类?
2)为什么我无法创建实现ActionListener的匿名内部类,而不是直接从第二类代码片段中直接从其实现?
当使用implementsXXXX
创建一个类时,您正在定义一个类(内部或非内部),并且必须给它起一个名字,确定我们可以做到,这就是我们经常做的事情。匿名内部类没有名字,它更像是一个表达式。
而且我认为这将帮助您了解什么是匿名类。
匿名类是一个表达式。除了没有名称外,它们类似于本地类
。匿名类表达式的语法类似于构造函数的调用,只是代码块中包含类定义。
考虑一下frenchGreeting对象的实例化:
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
匿名类表达式包含以下内容:
新的运营商
要实现的接口名称或要扩展的类的名称 。在此示例中,匿名类正在实现接口HelloWorld。
括号中包含构造函数的参数,就像普通的类实例创建表达式一样。注意: 在实现接口时,没有构造函数,因此 ,如本例所示, 使用一对空括号 。
一个主体,它是一个类声明主体。更具体地说,在主体中,允许使用方法声明,但不允许使用语句。
因为匿名类定义是一个表达式,所以它必须是语句的一部分。在此示例中,匿名类表达式是实例化frenchGreeting对象的语句的一部分。(这解释了为什么在大括号后面有一个分号。)
2020-11-01