定义
继承一个类或者实现一个接口的类,是一个内部类的简写形式,本质是一个内部类的匿名实现对象
目的
为了提供那种只需要实现一两次的类
形式
//继承一个类的匿名内部类
public class stasticTestDemo {
public static void main(String[] args) {
// class Inner extends annyInnerClass_Class{
// void method() {
// System.out.println("method");
// }
// }
new annyInnerClass_Class() {
void method() {
System.out.println("method");
}
}.method();
}
}
//实现一个接口的匿名内部类
public class stasticTestDemo {
public static void main(String[] args) {
// class Inner implements Inter{
//
// @Override
// public void function() {
// // TODO Auto-generated method stub
// System.out.println("function");
// }
//
// }
new Inter() {
public void function() {
System.out.println("function");
}
}.function();
}
}
interface Inter {
void function();
}
上面两种方法分别实现了继承一个类或者继承一个接口的形式,可以发现这些匿名内部类的对象都没有具体的名字
匿名内部类的多态
这里以实现继承一个类的形式为例子,实现接口也是同理
//继承一个类的匿名内部类
public class stasticTestDemo {
public static void main(String[] args) {
// class Inner extends annyInnerClass_Class{
// void method() {
// System.out.println("method");
// }
// void show() {
// System.out.println("show~~~~~");
// }
//
// }
// annyInnerClass_Class p=new Inner();
new annyInnerClass_Class() {
void method() {
System.out.println("method");
}
void show() {
System.out.println("show~~~~~");
}
}.show();
}
}
注释和未注释的等价,但是如果未注释的引用是annyInnerClass_Class,那么肯定会报错的。这样子就降低的多态
总结
对于一些只需要使用极少数的方法,我们应该尽可能考虑用匿名内部类,可以很好的实现多态并且减少代码量。