|NO.Z.00081|——————————|BigDataEnd|——|Java&特殊类.V09|——|Java.v09|匿名内部类|使用|
一、匿名内部类的使用
### --- 开发经验分享
~~~ ——> 当接口/类类型的引用作为方法的形参时,实参的传递方式有两种:
~~~ ——> 自定义类实现接口/继承类并重写方法,然后创建该类对象作为实参传递;
~~~ ——> 使用上述匿名内部类的语法格式得到接口/类类型的引用即可;
### --- 匿名内部类的语法格式(重点)
~~~ ——> 接口/父类类型引用变量名= new 接口/父类类型() { 方法的重写};
二、编程代码
package com.yanqi.task10;
public interface AnonymousInterface {
// 自定义抽象方法
public abstract void show();
}
三、编程代码
package com.yanqi.task10;
public class AnonymousInterfaceImpl implements AnonymousInterface {
@Override
public void show() {
System.out.println("这里是接口的实现类!");
}
}
四、编程代码
package com.yanqi.task10;
public class AnonymousInterfaceTest {
// 假设已有下面的方法,请问如何调用下面的方法?
// AnonymousInterface ai = new AnonymousInterfaceImpl();
// 接口类型的引用指向实现类型的对象,形成了多态
public static void test(AnonymousInterface ai) {
// 编译阶段调用父类版本,运行调用实现类重写的版本
ai.show();
}
public static void main(String[] args) {
//AnonymousInterfaceTest.test(new AnonymousInterface()); // Error:接口不能实例化
AnonymousInterfaceTest.test(new AnonymousInterfaceImpl());
System.out.println("---------------------------------------------------------------");
// 使用匿名内部类的语法格式来得到接口类型的引用,格式为:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };
AnonymousInterface ait = new AnonymousInterface() {
@Override
public void show() {
System.out.println("匿名内部类就是这么玩的,虽然你很抽象!");
}
};
// 从Java8开始提出新特性lamda表达式可以简化上述代码,格式为:(参数列表) -> {方法体}
AnonymousInterface ait2 = () -> System.out.println("lamda表达式原来是如此简单!");
AnonymousInterfaceTest.test(ait2);
}
}
五、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=54237:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task10.AnonymousInterfaceTest
这里是接口的实现类!
---------------------------------------------------------------
lamda表达式原来是如此简单!
Process finished with exit code 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv002-Java面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」