【发布时间】:2018-07-04 23:43:30
【问题描述】:
我正在阅读 oracle 文档中的匿名课程教程 (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html)
我复制了教程中使用的代码。(注释 Statement1 和 Statement2 由我附加):
public class HelloWorldAnonymousClasses {
interface HelloWorld {
public void greet();
public void greetSomeone(String someone);
}
public void sayHello() {
class EnglishGreeting implements HelloWorld {
String name = "world";
public void greet() {
greetSomeone("world");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hello " + name);
}
}
HelloWorld englishGreeting = new EnglishGreeting();
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde"; //Statement1
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
HelloWorld spanishGreeting = new HelloWorld() {
String name = "mundo"; //Statement2
public void greet() {
greetSomeone("mundo");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hola, " + name);
}
};
englishGreeting.greet();
frenchGreeting.greetSomeone("Fred");
spanishGreeting.greet();
}
public static void main(String[] args) {
HelloWorldAnonymousClasses myApp =
new HelloWorldAnonymousClasses();
myApp.sayHello();
}
}
教程继续解释: 匿名类表达式由以下内容组成:
新的运算符
要实现的接口或要扩展的类的名称。在本例中,匿名类实现了 HelloWorld 接口。
包含构造函数参数的括号,就像普通的类实例创建表达式一样。注意:当你实现一个接口时,没有构造函数,所以你使用一对空括号,如本例所示。
一个主体,它是一个类声明主体。 更具体地说,在正文中,允许声明方法,但不允许声明。
我被这点弄糊涂了。 4 以上。它说匿名类声明主体中不允许使用语句,但我可以看到其中使用的语句。 (我把 cmets Statement1 和 Statement2 放在了突出显示它们)。
您能否解释一下本教程从第 1 点开始想要传达的内容。 4?
提前致谢。
【问题讨论】:
-
不是语句而是实例变量定义和初始化
-
这些是字段声明,也应该是
private,这有助于消除您的困惑。
标签: java anonymous-class