匿名类

概述

1、就是没有名称的类,其名称由java编译器给出,一般是形如:外部类名称+$+匿名类顺序,没有名称也就是其他地方不能引用,不能实例化,只能用一次,当然也就不能有构造器

2、匿名类就是利用父类的构造函数和自身类体构造成一个类

格式

new 父类/接口(){子类内容}

特性

1、必须是继承一个父类或者实现一个接口

2、可以继承父类方法也可以重写父类方法

3、匿名类的类体可以声明成static成员变量和static方法

4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效

5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

作用

节约一个文件:如果继承父类或者实现接口的类只是用一次的话,就不用定义为一个类

代码示例

  1. /**
  2. Lambda表达式
  3. 1、Lambda表达式只适用于接口或者父类中只有1个方法的情况,省略了匿名内部类的对象名
  4. 2、如果Lambda表达式的内容只有一行做数据的返回,那么就直接使用语句即可,可以不写return
  5. */
  6. public interface Test01 {
  7. public void print(String a); //这是一个接口中的抽象方法
  8. }
  9. interface IMath{
  10. public int add(int x,int y);
  11. }
  12. class TestDemo{
  13. public static void main(String[] args) {
  14. Test01 test01=new Test01() { //匿名内部类
  15. @Override
  16. public void print(String a) {
  17. System.out.println(a+" 猴赛雷!");
  18. }
  19. };
  20. Test01 test02=(a)-> { //Lambda表达式只适用于接口或者父类中只有1个方法的情况,省略了匿名内部类的对象名
  21. System.out.println("Lambda猴赛雷啊!");
  22. System.out.println(a + " Lambda");
  23. };
  24. IMath iMath=(p1,p2)->p1+p2; //如果Lambda表达式的内容只有一行做数据的返回,那么就直接使用语句即可,可以不写return
  25. System.out.println(iMath.add(10,20));
  26. test01.print("1");
  27. test02.print("2");
  28. }
  29. }