当前位置:网站首页 > 技术博客 > 正文

java匿名类和匿名内部类



  1. 最本质的还是一个类
  2. 是一个内部类(有关内部类的内容不在这里讲述了)
  3. 该类没有名字(但是系统会分配一个代号在内存中)

假设我们有一个接口A
内部有一个未被实现的方法eat
如果我们想在main中直接调用eat方法
则按照传统思路需要一个类B来实现接口A,同时再创建类B的对象来调用A
代码如下:

 

如果我们只是想单纯的使用一次eat方法,不需要创建对象的话,则上面方法略显古板。
此时,便用到了匿名内部类。

 

上面这种写法就可以很好的简化代码的书写
此时的匿名内部类相当于一个对象,所以它的后面可以直接调用eat方法,非常的简便快捷
当A里面有多个方法时,如果想要同时调用,可以采用下面的写法:

 

而此时我们并没有实例化这个接口的类,便实现了里面的方法,所以称之为匿名内部类
其实,这个类是被临时创建了,在内存中存在系统设定的名字,
我们可以使用下面方法来得到匿名内部类的(名字)

 

由此可见,这个匿名内部类的名字为Interface01$1,当下一个匿名内部类时,就会变成$2,以此类推

通过实参的形式来使用,大大简化了代码的书写

 

而按照传统方法则需要:

 

在使用匿名内部类的过程中,我们需要注意如下几点:

  • 1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
  • 2、匿名内部类中是不能定义构造函数的。
  • 3、匿名内部类中不能存在任何的静态成员变量和静态方法。
  • 4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
  • 5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

版权声明


相关文章:

  • rrt算法优缺点2024-11-05 18:01:05
  • tftp -p -l2024-11-05 18:01:05
  • 树状数组简单易懂的详解2024-11-05 18:01:05
  • select语句例子2024-11-05 18:01:05
  • 跨域怎么理解2024-11-05 18:01:05
  • 思科模拟器3560交换机2024-11-05 18:01:05
  • 黑客软件 黑客工具箱2024-11-05 18:01:05
  • android webview 源码2024-11-05 18:01:05
  • html框架技术2024-11-05 18:01:05
  • 数字图像基本处理实验2024-11-05 18:01:05