Java匿名内部类

Java匿名内部类是一个没有名称的内部类,它只创建一个对象。当需要创建一个带有特定“额外功能”的对象实例(例如,重载类或接口的方法),而无需实际子类化一个类时,匿名内部类非常有用。

简单来说,没有名称的类在Java中被称为匿名内部类。如果您需要重写类或接口的方法,应该使用Java匿名内部类。Java匿名内部类可以通过以下两种方式创建:

  1. 类(可以是抽象类或具体类)。
  2. 接口

Java匿名内部类示例(使用类)

TestAnonymousInner.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();  
 }  
}  

输出:

nice fruits

给定代码的内部工作原理

Person p=new Person(){  
void eat(){System.out.println("nice fruits");}  
};  
  1. 创建一个类,但其名称由编译器决定,该类继承自Person类并提供了eat()方法的实现。
  2. 创建了一个匿名类的对象,由Person类型的引用变量'p'引用。

编译器生成的内部类

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'引用。

编译器生成的内部类

import java.io.PrintStream;  
static class TestAnonymousInner1$1 implements Eatable  
{  
TestAnonymousInner1$1(){}  
void eat(){System.out.println("nice fruits");}  
}  

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想