匿名内部类:代码简洁,可以同时声明和实例化
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
1.
While local classes are class declarations, anonymous classes are expressions, which means that you define the class in another expression. The following example, HelloWorldAnonymousClasses, uses anonymous classes in the initialization statements of the local variables frenchGreeting and spanishGreeting, but uses a local class for the initialization of the variable englishGreeting:
示例:
public class AnonymousExemple {
interface HelloWorld{
public void method1();
public void method2(String value);
}
public void sayHello(){
class LocalClass implements HelloWorld{
String name = "LocalClass";
public void method1() {
method2(name) ;
}
public void method2(String value) {
name = value ;
System.out.println("hello "+name);
}
};
LocalClass localClass = new LocalClass();
HelloWorld anonymousClassOne = new HelloWorld(){
String name = "anonymousClassOne";
public void method1() {
method2(name);
}
public void method2(String value) {
name = value ;
System.out.println("hello "+name);
}
};
HelloWorld anonymousClassTwo = new HelloWorld(){
String name = "anonymousClassTwo";
public void method1() {
method2(name);
}
public void method2(String value) {
name = value ;
System.out.println("hello "+name);
}
};
localClass.method1();
anonymousClassOne.method1();
anonymousClassTwo.method1();
}
public static void main(String[] args) {
AnonymousExemple a = new AnonymousExemple();
a.sayHello();
}
}
运行结果:
hello LocalClass
hello anonymousClassOne
hello anonymousClassTwo
匿名内部类语法:
操作符:new;
一个要实现的接口或要继承的类,案例一中的匿名类实现了HellowWorld接口,案例二中的匿名内部类继承了Animal父类;
一对括号,如果是匿名子类,与实例化普通类的语法类似,如果有构造参数,要带上构造参数;如果是实现一个接口,只需要一对空括号即可;
一段被"{}“括起来类声明主体;
末尾的”;"号(因为匿名类的声明是一个表达式,是语句的一部分,因此要以分号结尾)