
匿名内部类
发布日期: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()
,可以直接获取到一个匿名内部类实例,简化了调用流程。
匿名内部类的特点
- 无名字:匿名内部类没有类名,只能通过引用操作。
- 唯一性:每次定义都会生成新的子类实例。
- 结构固定:匿名内部类通常只包含必要的方法实现,结构较为简洁。
- 适用场景:适用于那些仅在特定上下文中使用一次的功能实现。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月08日 12时59分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
js求阶乘
2019-03-05
小程序图片正确使用方式(防止发布之后不显示)
2019-03-05
Java学习
2019-03-05
Js函数
2019-03-05
L1-009 N个数求和 (20 分)
2019-03-05
L2-031 深入虎穴 (25 分)
2019-03-05
Unity之PlayerPrefs
2019-03-05
简单的xml读取存储方法(未优化)
2019-03-05
Nginx---惊群
2019-03-05
2种解法 - 获取一条直线上最多的点数
2019-03-05
项目中常用的审计类型概述
2019-03-05
nodeName与tagName的区别
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05
linux下远程上传命令scp
2019-03-05
可重入和不可重入函数
2019-03-05
(2.1)关系模型之关系结构和约束
2019-03-05
androidstudio同步的时候下载jcenter的库出错解决办法
2019-03-05
ButterKnife使用问题
2019-03-05