Java匿名内部类

本文概述

  • 给定代码的内部工作
  • 编译器生成的内部类
  • 使用接口的Java匿名内部类示例
在Java中, 没有名称的类称为匿名内部类。如果你必须重写类或接口的方法, 则应使用它。 Java匿名内部类可以通过两种方式创建:
  1. 类(可以是抽象的或具体的)。
  2. 接口
使用类的Java匿名内部类示例
abstract class Person{ abstract void eat(); } class TestAnonymousInner{ public static void main(String args[]){ Person p=new Person(){ void eat(){System.out.println("nice fruits"); } }; p.eat(); } }

【Java匿名内部类】立即测试
输出:
nice fruits

给定代码的内部工作
Person p=new Person(){ void eat(){System.out.println("nice fruits"); } };

  1. 创建了一个类, 但其名称由编译器决定, 该编译器扩展了Person类并提供了eat()方法的实现。
  2. 创建由Person类型的p引用变量引用的Anonymous类的对象。
编译器生成的内部类
import java.io.PrintStream; static class TestAnonymousInner$1 extends Person { TestAnonymousInner$1(){} void eat() { System.out.println("nice fruits"); } }

使用接口的Java匿名内部类示例
interface Eatable{ void eat(); } class TestAnnonymousInner1{ public static void main(String args[]){ Eatable e=new Eatable(){ public void eat(){System.out.println("nice fruits"); } }; e.eat(); } }

立即测试
输出:
nice fruits

给定代码的内部工作
它执行此代码后的两个主要任务:
Eatable p=new Eatable(){ void eat(){System.out.println("nice fruits"); } };

  1. 创建了一个类, 但其名称由编译器决定, 该编译器实现Eatable接口并提供eat()方法的实现。
  2. 创建由Eatable类型的p引用变量引用的Anonymous类的对象。
编译器生成的内部类
import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println("nice fruits"); } }

    推荐阅读