本文共 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/