interface - Java中接口不能被实例化,那么如下的代码怎么理解?
PHP中文网
PHP中文网 2017-04-17 17:53:33
0
4
400
    public static final Function<String, Set<String>> MAPPING_FUNCTION = new Function<String, Set<String>>() {
            @Override
            public Set<String> apply(String s) {
                return new HashSet<>();
            }
        };

MAPPING_FUNCTION已经是接口Function<String, Set<String>>的一个实例了啊?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(4)
Peter_Zhu

這不是介面的實例,而是實作了介面的匿名內部類別的實例。
你沒有註意到它後面有個大括號嗎?明顯與我們一般使用A a=new A()的形式不一樣。
建議你看看內部類相關知識。

黄舟

這是匿名內部類別的一種寫法,實際上這種寫法等同於你新寫一個class,然後implements這個介面。
問題是,單單為實作介面的一個方法而新建一個class,未免太小題大做,因此大多數的寫法會直接寫一個匿名的內部類別。

因為我們並不關注類別的名字,我們只關注它的具體實現,這也是匿名內部類別的常見使用場景。

Ty80

《瘋狂Java講義》第6章有詳細講解,不想看書就直接搜"匿名內部類"

刘奇

匿名內部類,相當於一個類別實作了這個介面。只不過把聲明和實作寫在了一起。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!