匿名类
概述
1、就是没有名称的类,其名称由java编译器给出,一般是形如:外部类名称+$+匿名类顺序,没有名称也就是其他地方不能引用,不能实例化,只能用一次,当然也就不能有构造器
2、匿名类就是利用父类的构造函数和自身类体构造成一个类
格式
new 父类/接口(){子类内容}
特性
1、必须是继承一个父类或者实现一个接口
2、可以继承父类方法也可以重写父类方法
3、匿名类的类体可以声明成static成员变量和static方法
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
作用
节约一个文件:如果继承父类或者实现接口的类只是用一次的话,就不用定义为一个类
代码示例
/**
Lambda表达式
1、Lambda表达式只适用于接口或者父类中只有1个方法的情况,省略了匿名内部类的对象名
2、如果Lambda表达式的内容只有一行做数据的返回,那么就直接使用语句即可,可以不写return
*/
public interface Test01 {
public void print(String a); //这是一个接口中的抽象方法
}
interface IMath{
public int add(int x,int y);
}
class TestDemo{
public static void main(String[] args) {
Test01 test01=new Test01() { //匿名内部类
@Override
public void print(String a) {
System.out.println(a+" 猴赛雷!");
}
};
Test01 test02=(a)-> { //Lambda表达式只适用于接口或者父类中只有1个方法的情况,省略了匿名内部类的对象名
System.out.println("Lambda猴赛雷啊!");
System.out.println(a + " Lambda");
};
IMath iMath=(p1,p2)->p1+p2; //如果Lambda表达式的内容只有一行做数据的返回,那么就直接使用语句即可,可以不写return
System.out.println(iMath.add(10,20));
test01.print("1");
test02.print("2");
}
}