匿名内部类
发布日期:2021-05-07 09:10:55 浏览次数:14 分类:精选文章

本文共 1742 字,大约阅读时间需要 5 分钟。

匿名内部类的应用与示例

匿名内部类是一种在Java编程中简化内类定义的高级技巧,主要用于在抽象类或接口上定义特定的子类实现。这种结构适用于那些仅在特定上下文中使用一次的子类。

基本用法示例

考虑以下程序结构:

class JavaDemo {    public static void main(String[] args) {        // 向上转型        IMessage msg = new MessageImpl();        msg.send("消息内容");    }}// 接口定义抽象方法interface IMessage {    public void send(String str);}// 子类继承并覆写方法class MessageImpl implements IMessage {    public void send(String str) {        System.out.println(str);    }}

结果:消息内容会被打印出来。

在上述程序中,MessageImpl类仅用于实现接口的唯一方法。如果这种实现只在特定情况下使用,可以通过匿名内部类来简化代码结构。

匿名内部类的定义与使用

将上述程序改写为使用匿名内部类:

class JavaDemo {    public static void main(String[] args) {        IMessage msg = new IMessage() {            // 匿名内部类实现接口            public void send(String str) {                System.out.println(str);            }        };        msg.send("消息内容");    }}// 接口定义抽闲方法interface IMessage {    public void send(String str);}

效果:与之前的实现完全一致,但代码更加简洁。

静态方法返回匿名内部类

为了更方便地展示匿名内部类,可以通过静态方法返回一个匿名子类实例:

class JavaDemo {    public static void main(String[] args) {        IMessage msg = IMessage.getInstance();        msg.send("消息内容");    }    // 静态方法不需要实例化即可使用    public static IMessage getInstance() {        return new IMessage() {            // 返回一个匿名内部类            public void send(String str) {                System.out.println(str);            }        };    }}// 接口定义抽闲方法interface IMessage {    public void send(String str);    // 静态方法不需要实例化就可以使用    public static IMessage getInstance() {        return new IMessage() {            public void send(String str) {                System.out.println(str);            }        };    }}

效果:通过静态方法getInstance(),可以直接获取到一个匿名内部类实例,简化了调用流程。

匿名内部类的特点

  • 无名字:匿名内部类没有类名,只能通过引用操作。
  • 唯一性:每次定义都会生成新的子类实例。
  • 结构固定:匿名内部类通常只包含必要的方法实现,结构较为简洁。
  • 适用场景:适用于那些仅在特定上下文中使用一次的功能实现。
上一篇:Lambda表达式
下一篇:方法中定义内部类

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月08日 12时59分43秒