Java教程

Java匿名内部类

一个没有名称的类在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引用变量引用。

由编译器生成的内部类

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");
    }
}
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4