1.产生原因:使用接口需要定义类来实现,而有时接口的实现类只需使用一次
2.格式:
接口名称 对象名 = new 接口名称() {
@Override // 重写抽象方法
};
3.注意:
Ⅰ . 匿名内部类只能用一次。
Ⅱ. 匿名对象,在【调用方法】的时候,只能调用唯一一次。
如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
Ⅲ. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
4…强调:匿名内部类和匿名对象不是一回事!区别如下:
Ⅰ . 匿名内部类的匿名对象:如 new MyInterface() {…};
Ⅱ. 匿名内部类有对象名:如 MyInterface objA = new MyInterface() {…}。
public class DemoMain {
public static void main(String[] args) {
//通常是创建类来实现接口,如下:
//class MyInterfaceImpl implement MyInterface{
// MyInterface obj = new MyInterfaceImpl();
// obj.method();
// }
// 使用匿名内部类,但不是匿名对象,对象名称就叫objA
MyInterface objA = new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!");
}
};
objA.method1();
System.out.println("=================");
// 使用了匿名内部类,而且省略了对象名称,也是匿名对象
new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!");
}
}.method1();
// 因为匿名对象无法调用第二次方法,所以需要再创建一个匿名内部类的匿名对象
new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法");
}
}.method2();
}
}