最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8中接口的新特性使用指南

 更新時(shí)間:2021年11月01日 11:47:12   作者:南風(fēng)Candy  
接口改動(dòng)一下就要修改對(duì)應(yīng)的實(shí)現(xiàn)類,為了兼容老接口,Java8新增了默認(rèn)方法和靜態(tài)方法,下面這篇文章主要給大家介紹了關(guān)于Java8中接口新特性的相關(guān)資料,需要的朋友可以參考下

前言

在Java8中接口中不再只有抽象方法,還可以有靜態(tài)方法以及默認(rèn)方法,此時(shí)的接口更像是一個(gè)類。我們一起來看看如何使用吧~

Java8中,可以為接口添加靜態(tài)方法和默認(rèn)方法。

靜態(tài)方法:使用static關(guān)鍵字修飾??梢酝ㄟ^接口直接調(diào)用靜態(tài)方法,并執(zhí)行其方法體

默認(rèn)方法:使用default關(guān)鍵字修飾??梢酝ㄟ^類來調(diào)用

直接看代碼吧

package com.nanfeng.demo.interfacepractice.java8;
 
/**
 * java8中的新特性
 * 在接口中默認(rèn)方法的權(quán)限是public,所以public也可以省略
 */
public interface CompareA {
    // 接口中可以定義抽象方法
    public static void method1() {
        System.out.println("Java8中接口中可以定義靜態(tài)方法,通過接口來調(diào)用--1");
    }
 
    // 默認(rèn)方法
    public default void method2() {
        System.out.println("Java8中接口中可以定義默認(rèn)方法--2");
    }
    public default void method3() {
        System.out.println("Java8中接口中可以定義默認(rèn)方法--3");
    }
}
 

編寫測(cè)試類ComepareTest

package com.nanfeng.demo.interfacepractice.java8;
 
public class CompareATest {
    public static void main(String[] args) {
        // 創(chuàng)建實(shí)現(xiàn)類對(duì)象
        CompareAClass c = new CompareAClass();
        /**
         * 知識(shí)點(diǎn)一:接口中的靜態(tài)方法 只能通過接口來調(diào)用
         * Static method may be invoked on containing interface class only
         * 靜態(tài)方法只能在包含接口類時(shí)調(diào)用         */
        // c.method1();
 
        // 使用接口調(diào)用method1()方法,此時(shí)的接口有點(diǎn)像工具類了
        CompareA.method1();
        /**
         * 知識(shí)點(diǎn)二:
         * 默認(rèn)方法,可以通過創(chuàng)建實(shí)現(xiàn)類的對(duì)象來調(diào)用接口中的默認(rèn)方法
         * 或者也可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫
         */
        c.method2();
    }
}
 
class CompareAClass implements CompareA {
    /**
     * 在實(shí)現(xiàn)類中對(duì)接口中的默認(rèn)方法進(jìn)行重寫時(shí)
     * 注意:不可以省略public權(quán)限修飾,否則會(huì)報(bào)錯(cuò)
     * 執(zhí)行時(shí),依然會(huì)調(diào)用我們重寫后的方法,符合繼承
     *
     *
     */
    @Override
    public void method2() {
        System.out.println("Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略");
    }
}

運(yùn)行結(jié)果:

Java8中接口中可以定義靜態(tài)方法,通過接口來調(diào)用
Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略--2

第一種情況,一個(gè)類實(shí)現(xiàn)了接口的同時(shí)又繼承了一個(gè)父類

1、創(chuàng)建實(shí)現(xiàn)類的父類

package com.nanfeng.demo.interfacepractice.java8;
 
/**
 * 實(shí)現(xiàn)類的父類
 */
public class SuperClass {
    // 定義與接口中同名的方法
    public void method3(){
        System.out.println("實(shí)現(xiàn)類的父類中,出現(xiàn)和接口中同名同參數(shù)的方法--SuperClass");
    }
}

2、讓子類實(shí)現(xiàn)接口的同時(shí)繼承父類

package com.nanfeng.demo.interfacepractice.java8;
 
public class CompareATest {
    public static void main(String[] args) {
        // 創(chuàng)建實(shí)現(xiàn)類對(duì)象
        CompareAClass c = new CompareAClass();
        /**
         * 知識(shí)點(diǎn)一:接口中的靜態(tài)方法 只能通過接口來調(diào)用
         * Static method may be invoked on containing interface class only
         * 靜態(tài)方法只能在包含接口類時(shí)調(diào)用         */
        // c.method1();
 
        // 使用接口調(diào)用method1()方法,此時(shí)的接口有點(diǎn)像工具類了
        CompareA.method1();
        /**
         * 知識(shí)點(diǎn)二:
         * 默認(rèn)方法,可以通過創(chuàng)建實(shí)現(xiàn)類的對(duì)象來調(diào)用接口中的默認(rèn)方法
         * 或者也可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫
         */
        c.method2();
         /**
         * 知識(shí)點(diǎn)三:
         * 父類中的方法和接口中的方法同名時(shí)應(yīng)該怎么處理?
         * 如果子類(或?qū)崿F(xiàn)類)繼承的父類和實(shí)現(xiàn)的接口中聲明了同名同參的方法
         * 那么在子類沒有重寫此方法時(shí),默認(rèn)的調(diào)用的是父類中同名同參的方法。
         * -->類優(yōu)先原則
         */
        c.method3();
    }
}
 
class ComepareAClass extends SuperClass implements CompareA {
    /**
     * 在實(shí)現(xiàn)類中對(duì)接口中的默認(rèn)方法進(jìn)行重寫時(shí)
     * 注意:不可以省略public權(quán)限修飾,否則會(huì)報(bào)錯(cuò)
     * 執(zhí)行時(shí),依然會(huì)調(diào)用我們重寫后的方法,符合繼承
     */
    @Override
    public void method2() {
        System.out.println("Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略");
    }
 
 
}

運(yùn)行查看結(jié)果:

Java8中接口中可以定義靜態(tài)方法,通過接口來調(diào)用--1
Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略--2
實(shí)現(xiàn)類的父類中,出現(xiàn)和接口中同名的方法--SuperClass

情況二

實(shí)現(xiàn)類在沒有繼承父類的前提下,對(duì)多個(gè)接口進(jìn)行實(shí)現(xiàn),應(yīng)該如何處理

1、創(chuàng)建CompareB接口,創(chuàng)建和CompareA接口中通同參的默認(rèn)方法

注意:如果一個(gè)類同時(shí)繼承多個(gè)接口,接口中出現(xiàn)同名同參的默認(rèn)方法時(shí),會(huì)出現(xiàn)接口沖突。此時(shí),實(shí)現(xiàn)類必須重寫此方法

/**
 * Java接口中支持接口的多繼承
 * 情況一:
 * class ComepareAClass extends SuperClass implements CompareA
 * CompareA接口和SuperClass父類出現(xiàn)同名同參的方法時(shí),默認(rèn)會(huì)調(diào)用父類中的方法,體現(xiàn)了類優(yōu)先原則
 * 情況二:
 * class ComepareAClass implements CompareA, CompareB
 * 在沒有繼承父類的前提下,一個(gè)類對(duì)多個(gè)接口繼承的前提下,兩個(gè)接口中定義了同名同參的默認(rèn)方法,會(huì)如何執(zhí)行?
 * 知識(shí)點(diǎn)四:
 * 如果一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)了多個(gè)接口,而這多個(gè)接口中定義了同名同參的默認(rèn)方法,那么在實(shí)現(xiàn)類沒有重寫此方法的情況下,報(bào)錯(cuò)
 * -->會(huì)出現(xiàn)借口沖突
 * 這就必須我們?cè)趯?shí)現(xiàn)類中重寫此方法
 *
 */
class CompareAClass implements CompareA, CompareB {
    /**
     * 在實(shí)現(xiàn)類中對(duì)接口中的默認(rèn)方法進(jìn)行重寫時(shí)
     * 注意:不可以省略public權(quán)限修飾,否則會(huì)報(bào)錯(cuò)
     * 執(zhí)行時(shí),依然會(huì)調(diào)用我們重寫后的方法,符合繼承
     */
    @Override
    public void method2() {
        System.out.println("Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略--2");
    }
    // 解決接口沖突,必須對(duì)接口中的方法進(jìn)行重寫
    @Override
    public void method3() {
        System.out.println("ComepareAClass實(shí)現(xiàn)類對(duì)多個(gè)接口中的同名方法進(jìn)行重寫,重寫后執(zhí)行的就是實(shí)現(xiàn)類中的方法--method3()");
    }
}

運(yùn)行結(jié)果:

Java8中接口中可以定義靜態(tài)方法,通過接口來調(diào)用--1
Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略--2
ComepareAClass實(shí)現(xiàn)類對(duì)多個(gè)接口中的同名方法進(jìn)行重寫,重寫后執(zhí)行的就是實(shí)現(xiàn)類中的方法--method3()

情況三

在子類(或?qū)崿F(xiàn)類)中自己定義的方法中,調(diào)用接口和父類中沒有被重寫的方法

/**
 * Java接口中支持接口的多繼承
 * 情況一:
 * class ComepareAClass extends SuperClass implements CompareA
 * CompareA接口和SuperClass父類出現(xiàn)同名同參的方法時(shí),默認(rèn)會(huì)調(diào)用父類中的方法,體現(xiàn)了類優(yōu)先原則
 * 情況二:
 * class ComepareAClass implements CompareA, CompareB
 * 在沒有繼承父類的前提下,一個(gè)類對(duì)多個(gè)接口繼承的前提下,兩個(gè)接口中定義了同名同參的默認(rèn)方法,會(huì)如何執(zhí)行?
 * 知識(shí)點(diǎn)四:
 * 如果一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)了多個(gè)接口,而這多個(gè)接口中定義了同名同參的默認(rèn)方法,那么在實(shí)現(xiàn)類沒有重寫此方法的情況下,報(bào)錯(cuò)
 * -->會(huì)出現(xiàn)借口沖突
 * 這就必須我們?cè)趯?shí)現(xiàn)類中重寫此方法
 * 情況三:
 * class CompareAClass extends SuperClass implements CompareA, CompareB
 * 一個(gè)子類(或?qū)崿F(xiàn)類)繼承父類的同時(shí)實(shí)現(xiàn)多個(gè)接口
 * 在子類(或?qū)崿F(xiàn)類)中自己定義的方法中,調(diào)用接口和父類中沒有被重寫的方法
 * */
class CompareAClass extends SuperClass implements CompareA, CompareB {
    /**
     * 在實(shí)現(xiàn)類中對(duì)接口中的默認(rèn)方法進(jìn)行重寫時(shí)
     * 注意:不可以省略public權(quán)限修飾,否則會(huì)報(bào)錯(cuò)
     * 執(zhí)行時(shí),依然會(huì)調(diào)用我們重寫后的方法,符合繼承
     */
    @Override
    public void method2() {
        System.out.println("Java8中實(shí)現(xiàn)類可以對(duì)接口中的默認(rèn)方法進(jìn)行重寫,注意聲明方法的權(quán)限修飾符為public,且public不可省略--2");
    }
    // 解決接口沖突,必須對(duì)接口中的方法進(jìn)行重寫
    @Override
    public void method3() {
        System.out.println("ComepareAClass實(shí)現(xiàn)類對(duì)多個(gè)接口中的同名方法進(jìn)行重寫,重寫后執(zhí)行的就是實(shí)現(xiàn)類中的方法--method3()");
    }
 
    /**
     * 知識(shí)點(diǎn)五:如何在子類(或?qū)崿F(xiàn)類)的方法中調(diào)用父類(或者接口中)沒有被重寫的方法
     */
    public void myMethod(){
        // 調(diào)用自己重寫的method3()方法
        this.method3();
        // 調(diào)用父類中聲明的method3()方法
        super.method3();
        // 調(diào)接口中的默認(rèn)方法(注意:是非靜態(tài)方法,所以不可以使用接口名調(diào)用)
        //調(diào)用方式:接口名.super.方法
        CompareA.super.method3();
        CompareB.super.method3();
 
    }
}

總結(jié)

到此這篇關(guān)于Java8中接口新特性的文章就介紹到這了,更多相關(guān)Java8接口新特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理問題

    聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理問題

    Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊(cè)中心)、動(dòng)態(tài)配置服務(wù)(可以做配置中心)、動(dòng)態(tài)?DNS?服務(wù)。本文重點(diǎn)給大家介紹SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理,感興趣的朋友一起看看吧
    2022-01-01
  • Kotlin 基本語(yǔ)法實(shí)例詳解

    Kotlin 基本語(yǔ)法實(shí)例詳解

    這篇文章主要介紹了Kotlin 基本語(yǔ)法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • springboot整合企微webhook機(jī)器人發(fā)送消息提醒

    springboot整合企微webhook機(jī)器人發(fā)送消息提醒

    這篇文章主要為大家介紹了springboot整合企微webhook機(jī)器人發(fā)送消息提醒,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 使用RedisAtomicLong優(yōu)化性能問題

    使用RedisAtomicLong優(yōu)化性能問題

    這篇文章主要介紹了使用RedisAtomicLong優(yōu)化性能問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring Boot Mysql 數(shù)據(jù)庫(kù)操作示例

    Spring Boot Mysql 數(shù)據(jù)庫(kù)操作示例

    本篇文章主要介紹了Spring Boot Mysql 數(shù)據(jù)庫(kù)操作示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • java編寫的文件管理器代碼分享

    java編寫的文件管理器代碼分享

    本文給大家分享的是一則使用java編寫的文件管理器的代碼,新人練手的作品,邏輯上還是有點(diǎn)小問題,大家?guī)兔纯窗伞?/div> 2015-04-04
  • Java中@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案

    Java中@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案

    本文主要介紹了@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java 使用Graphics2D在圖片上寫字

    java 使用Graphics2D在圖片上寫字

    這篇文章主要介紹了java 使用Graphics2D在圖片上寫字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JavaWeb ServletContext基礎(chǔ)與應(yīng)用詳細(xì)講解

    JavaWeb ServletContext基礎(chǔ)與應(yīng)用詳細(xì)講解

    ServletConfig對(duì)象,叫Servlet配置對(duì)象。主要用于加載配置文件的初始化參數(shù)。我們知道一個(gè)Web應(yīng)用里面可以有多個(gè)servlet,如果現(xiàn)在有一份數(shù)據(jù)需要傳給所有的servlet使用,那么我們就可以使用ServletContext對(duì)象了
    2023-01-01

最新評(píng)論

阜城县| 冷水江市| 芮城县| 江孜县| 长葛市| 沈丘县| 仁化县| 年辖:市辖区| 卓资县| 乌拉特中旗| 驻马店市| 沂南县| 息烽县| 南木林县| 儋州市| 灌阳县| 上蔡县| 大安市| 秭归县| 阿鲁科尔沁旗| 鹰潭市| 山西省| 洛扎县| 株洲市| 柳河县| 洛南县| 富顺县| 姜堰市| 密云县| 花垣县| 河曲县| 凤凰县| 黔西| 永昌县| 常山县| 宕昌县| 灵山县| 澳门| 涪陵区| 临猗县| 南丰县|