匿名内部类(引用是解决接口只用一次的问题!不需要实现类实现接口,简化步骤)
定义一个接口:
代码:
public interface MyInterface {
void method();
void method2();
}
主类(直接在主类中调用匿名内部类,在匿名内部类中重写方法!):
代码:
public class Demo01AnnoyInnerClass {
public static void main(String[] args) {
MyInterface obj=new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类实现了方法。");
}
@Override
public void method2() {
}
};
obj.method();
/* MyInterface obj2=new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类实现了方法。");
}
@Override
public void method2() {
}
};
obj2.method();*/
new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类实现了方法。");
}
@Override
public void method2() {
}
}.method();
new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类实现了方法。");
}
@Override
public void method2() {
}
}.method2();
}
}
注意点:
/*为啥使用匿名内部类:
- 如果接口的实现类(或者父类的子类),只需使用一次。
- 那么这种情况下就可以省略掉该类的定义,直接使用匿名内部类
- 格式:
- 接口名称 对象名=new 接口名称(){覆盖重写所有的方法};*/
/*注意点: - 1.匿名内部类,在创建对象时,只能使用唯一一次
- 如果希望多次使用,而且类的内容一样的话,那么就必须使用单独定义的实现类了。
- 2.匿名对象,在调用方法时,只能调用一次
- 如果希望同一个对象,调用多次方法,那么必须给对象取个名字。
- 3.匿名内部类时省略了【实现类/子类名称】但是匿名对象是省略了【对象名称】
- 强调,匿名内部类和匿名对象不是一回事。