博客
关于我
匿名内部类
阅读量:330 次
发布时间:2019-03-04

本文共 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(),可以直接获取到一个匿名内部类实例,简化了调用流程。

匿名内部类的特点

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

转载地址:http://gewe.baihongyu.com/

你可能感兴趣的文章
Head First设计模式——迭代器模式
查看>>
MongoDB版本及存储引擎区别
查看>>
shell echo单行和多行文字定向写入到文件中
查看>>
AtCoder Beginner Contest 100 题解
查看>>
【数据结构】可持久化线段树初步
查看>>
后缀树
查看>>
Java高性能编程之CAS与ABA及解决方法
查看>>
从BIO到Netty的演变
查看>>
《算法导论》第二章笔记
查看>>
HTML节点操作
查看>>
HTML5新特性
查看>>
async/await剖析
查看>>
cmp命令
查看>>
一次编辑
查看>>
代理模式
查看>>
长按键入
查看>>
JavaScript中的链式调用
查看>>
day-04-列表
查看>>
Linux 磁盘管理(df fu fdisk mkfs mount)
查看>>
空间向量
查看>>