匿名内部类
匿名内部类
匿名内部类:
new 接口名/抽象类名(){
//重写接口或者抽象类中的方法
}
一旦写了以上内容就意味着JVM在运行过程中做了几件事:
1、JVM内部自己创建一个类
2、这个类实现一个接口或者继承了一个抽象类
3、将这个类的对象创建出来
interface Inter1{
void fun1();
}
class Demo1{
//当你看到一个接口作为方法参数类型的时候,将来调用时需要传入实现该接口的具体类对象
public void show1(Inter1 inter1){ //Inter1 inter1 = new Inter1Impl1()
inter1.fun1();
}
}
public class NiMingClassDemo1 {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
// demo1.show1(new Inter1Impl1());
//
// demo1.show1(new Inter1Impl2());
demo1.show1(new Inter1() {
@Override
public void fun1() {
System.out.println("李刚今天下午没有睡觉...");
}
});
demo1.show1(new Inter1() {
@Override
public void fun1() {
System.out.println("江川今天下午睡觉了...");
}
});
test
/*
要求在控制台输出”HelloWorld”
*/
interface Inter3 {
void show();
}
//class Inter3Impl implements Inter3{
// @Override
// public void show() {
// System.out.println("HelloWorld");
// }
//}
class Outer3 {
//补齐代码
public static Inter3 method(){
// return new Inter3Impl();
//使用匿名内部类改进
return new Inter3() {
@Override
public void show() {
System.out.println("HelloWorld");
}
};
// return ()->System.out.println("HelloWorld");
}
}
class OuterDemo {
public static void main(String[] args) {
//method方法是直接通过Outer3类名进行访问,method方法在Outer3是被static修饰的
//调用完method方法之后还可以继续调用show方法,就说明method的返回值是一个对象
//因为最后调用的是show方法,在这个程序中只有在接口中看到一个show方法
//所以method的返回值类型是Inter3类型
Outer3.method().show();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!