Java教程-Java匿名内部类

Java匿名内部类
Java匿名内部类是一个没有名称的内部类,它只创建一个对象。当需要创建一个带有特定“额外功能”的对象实例(例如,重载类或接口的方法),而无需实际子类化一个类时,匿名内部类非常有用。
简单来说,没有名称的类在Java中被称为匿名内部类。如果您需要重写类或接口的方法,应该使用Java匿名内部类。Java匿名内部类可以通过以下两种方式创建:
- 类(可以是抽象类或具体类)。
- 接口
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");}
};
- 创建一个类,但其名称由编译器决定,该类继承自Person类并提供了eat()方法的实现。
- 创建了一个匿名类的对象,由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");}
};
- 创建一个类,但其名称由编译器决定,该类实现了Eatable接口并提供了eat()方法的实现。
- 创建了一个匿名类的对象,由Eatable类型的引用变量'p'引用。
编译器生成的内部类
import java.io.PrintStream;
static class TestAnonymousInner1$1 implements Eatable
{
TestAnonymousInner1$1(){}
void eat(){System.out.println("nice fruits");}
}