匿名内部类

匿名内部类

 匿名内部类:
        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();
    }
}

posted @   rrrzzzrrr  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示