📜  Java类之anonymous

📅  最后修改于: 2020-09-26 09:13:18             🧑  作者: Mango

Java anonymous

在Java中,没有名称的类称为匿名内部类。如果您必须重写类或接口的方法,则应使用它。 Java匿名内部类可以通过两种方式创建:

  • 类(可以是抽象的或具体的)。
  • 接口

使用类的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引用变量引用的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");}
  };
  • 创建了一个类,但是其名称由编译器决定,该编译器实现Eatable接口并提供eat()方法的实现。
  • 创建一个由Eatable类型的p引用变量引用的Anonymous类的对象。

编译器生成的内部类


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