关键词搜索

源码搜索 ×
×

一篇文章带你搞定 Java 中的匿名内部类

发布2020-01-14浏览429次

详情内容

Java 中除了内部类,还有一种匿名内部类,匿名内部类就是指没有一个具体名称的类,且是在接口和抽象类的应用上发展起来的。

interface A{//定义接口A
    public void printInfo();//定义抽象方法
}

class B implements A{//定义接口实现类
    public void printInfo(){//覆写抽象方法
        System.out.println("Hello World !!!");
    }
}

class X{//定义 X 类
    public void fun1(){//定义 fun1 方法
        this.fun2(new B());//传递子类实例
    }
    public void fun2(A a){//接收接口实例
        a.printInfo();//调用接口方法
    }
}

public class Test{
    public static void main(String[] args) {
        new X().fun1();//实例化X类并调用 fun1() 方法
    }
}

    此时如果接口的实现类只使用一次,那么就没有必要单独定义一个子类 B,所以此时可以使用匿名内部类完成:

    interface A{//定义接口A
        public void printInfo();//定义抽象方法
    }
    
    class X{//定义 X 类
        public void fun1(){//定义 fun1 方法
            this.fun2(new A(){//匿名内部类
                public void printInfo(){//实现接口中的抽象方法
                    System.out.println("Hello World !!!");
                }
            });
        }
        public void fun2(A a){//接收接口实例
            a.printInfo();//调用接口方法
        }
    }
    
    public class Test{
        public static void main(String[] args) {
            new X().fun1();//实例化X类并调用 fun1() 方法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    直接实例化接口对象:

    new A() {}
    
    • 1

    此时是直接为接口实例化,但是接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载