匿名类
概述
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() { //匿名内部类@Overridepublic 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表达式的内容只有一行做数据的返回,那么就直接使用语句即可,可以不写returnSystem.out.println(iMath.add(10,20));test01.print("1");test02.print("2");}}
