Java匿名内部类

1 什么是Java匿名内部类

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

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

2 Java匿名内部类的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java匿名内部类的例子
 */
abstract class Person{
    abstract void eat();
}
class Demo{
    public static void main(String args[]){
        Person p=new Person(){
            void eat(){
                System.out.println("很好吃...");
            }
        };
        p.eat();
    }
}

输出结果为:

很好吃...

3 Java匿名内部类工作原理

Person p=new Person(){  
    void eat(){
      System.out.println("很好吃...");
    }  
};  
  • 创建了一个类,但其名称由编译器决定,该编译器扩展了Person类并提供了eat() 方法的实现。
  • 创建由Person类型的p引用变量引用的匿名类的对象。

以下是反编译的匿名内部类源码:

import java.io.PrintStream;  

static class Demo$1 extends Person  
{  
   Demo$1(){}  
   void eat()  
    {  
        System.out.println("很好吃...");  
    }  
}  

4 使用接口的匿名内部类的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 带接口的Java匿名内部类的例子
 */
interface Eatable{
    void eat();
}
class Demo{
    public static void main(String args[]){
        Eatable e=new Eatable(){
            public void eat(){System.out.println("很好吃的苹果...");}
        };
        e.eat();
    }
}

输出结果为:

很好吃的苹果...

5 使用接口的匿名内部类工作原理

Eatable p=new Eatable(){  
     void eat(){
       System.out.println("很好吃的苹果");
     }  
};  
  • 创建了一个类,但是其名称由编译器决定,该编译器实现Eatable接口并提供eat() 方法的实现。
  • 创建由Eatable类型的p引用变量引用的匿名类的对象。

以下为反编译带接口的匿名内部类的源码:
 

import java.io.PrintStream; 
 
static class Demo$1 implements Eatable  
{  
    Demo$1(){}  
    void eat(){
        System.out.println("很好吃的苹果...");
    }  
}  

 

推荐好课