亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

靜態(tài)方法:使用static關鍵字修飾。可以通過接口直接調(diào)用靜態(tài)方法,并執(zhí)行其方法體

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

直接看代碼吧

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

編寫測試類ComepareTest

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

運行結(jié)果:

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

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

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

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

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

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

運行查看結(jié)果:

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

情況二

實現(xiàn)類在沒有繼承父類的前提下,對多個接口進行實現(xiàn),應該如何處理

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

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

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

運行結(jié)果:

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

情況三

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

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

總結(jié)

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

相關文章

  • Java Spring MVC獲取請求數(shù)據(jù)詳解操作

    Java Spring MVC獲取請求數(shù)據(jù)詳解操作

    Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質(zhì)上相當于 Servlet,Spring MVC 角色劃分清晰,分工明細。由于 Spring MVC 本身就是 Spring 框架的一部分,可以說和 Spring 框架是無縫集成
    2021-11-11
  • SpringMVC實現(xiàn)文件上傳和下載功能

    SpringMVC實現(xiàn)文件上傳和下載功能

    這篇文章主要為大家詳細介紹了SpringMVC實現(xiàn)文件上傳和下載功能 ,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 解決RedisTemplate調(diào)用increment報錯問題

    解決RedisTemplate調(diào)用increment報錯問題

    這篇文章主要介紹了解決RedisTemplate調(diào)用increment報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 詳解Spring boot操作文件的多種方式

    詳解Spring boot操作文件的多種方式

    這篇文章主要介紹了Spring boot操作文件的幾種方式,主要給大家介紹操作文件的三種方式,每種方式通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • java實現(xiàn)ssh連接服務器的方法步驟

    java實現(xiàn)ssh連接服務器的方法步驟

    本文主要介紹了java實現(xiàn)ssh連接服務器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • SpringBoot Jpa企業(yè)開發(fā)示例詳細講解

    SpringBoot Jpa企業(yè)開發(fā)示例詳細講解

    這篇文章主要介紹了SpringBoot Jpa企業(yè)開發(fā)示例,Jpa可以通過實體類生成數(shù)據(jù)庫的表,同時自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調(diào)用方法即可,很方便
    2022-11-11
  • Spring通過工具類實現(xiàn)獲取容器中的Bean

    Spring通過工具類實現(xiàn)獲取容器中的Bean

    在實際開發(fā)中,我們往往要用到Spring容器為我們提供的諸多資源,例如想要獲取到容器中的配置、獲取到容器中的Bean等等。本文為大家詳細講講工具類如何獲取到Spring容器中的Bean,需要的可以參考一下
    2022-06-06
  • 啟動SpringBoot報錯Input length = 1問題及解決

    啟動SpringBoot報錯Input length = 1問題及解決

    這篇文章主要介紹了啟動SpringBoot報錯Input length = 1問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • IntelliJ IDEA設置代碼的快捷編輯模板Live Templates

    IntelliJ IDEA設置代碼的快捷編輯模板Live Templates

    今天小編就為大家分享一篇關于IntelliJ IDEA設置代碼的快捷編輯模板Live Templates,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • ssm框架下web項目,web.xml配置文件的作用(詳解)

    ssm框架下web項目,web.xml配置文件的作用(詳解)

    下面小編就為大家?guī)硪黄猻sm框架下web項目,web.xml配置文件的作用(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論