如果接口的实现类(或者是父类的子类),只需要使用唯一的一次,那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】
package inner_class;
public interface My_interface {
void my_method();
}
package inner_class;
public class My_interface_impl implements My_interface{
@Override
public void my_method() {
System.out.println("实现了接口");
}
}
package inner_class;
public class test_1 {
public static void main(String[] args) {
My_interface a=new My_interface_impl();//只使用一次
a.my_method();
}
}
匿名内部类的定义格式
接口名称(类) 对象名=new 接口名称(类)(){
覆盖重写所有抽象方法
};
package inner_class;
public interface My_interface {
void my_method();
}
package inner_class;
import java.sql.SQLOutput;
public class test_1 {
public static void main(String[] args) {
My_interface a=new My_interface() {
@Override
public void my_method() {
System.out.println("匿名内部类实现了接口");
}
};
a.my_method();
}
}
这样话,就不需要单独为一个接口去写一个实现类
格式解析:
1:new 代表创建对象的动作
2:接口名称就是匿名内部类需要实现哪个接口
3:{…}才是匿名内部类的内容,匿名内部类创建对象时只能使用唯一 一次
匿名内部类是省略了【实现类、子类名称】,但是匿名对象是省略了【对象名称】,匿名内部类与匿名对象不是一回事