欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法詳解

 更新時(shí)間:2021年06月09日 16:18:54   作者:貓巳  
今天帶大家學(xué)習(xí)的是Java8新特性的相關(guān)知識(shí),文章圍繞著Java接口中的默認(rèn)方法和靜態(tài)方法展開(kāi),文中有非常詳細(xì)的的代碼示例,需要的朋友可以參考下

一、前言

Java 8 引入了默認(rèn)方法以及可以在接口中定義的靜態(tài)方法。

默認(rèn)方法是一個(gè)普通的 java 方法,但以 default 關(guān)鍵字開(kāi)頭,靜態(tài)方法像往常一樣用 static 關(guān)鍵字聲明。

二、為什么在 Java 接口中使用默認(rèn)方法?

為什么java在接口中引入了默認(rèn)方法。

假設(shè)一個(gè)拖拉機(jī)制造公司發(fā)布了操作拖拉機(jī)的標(biāo)準(zhǔn)接口,如如何掛擋或停車等。

開(kāi)發(fā)者已經(jīng)開(kāi)發(fā)了不同類型的拖拉機(jī)來(lái)實(shí)現(xiàn)標(biāo)準(zhǔn)的拖拉機(jī)接口。

如果公司在其標(biāo)準(zhǔn)接口中增加了新的功能,如如何跳動(dòng)拖拉機(jī)?

開(kāi)發(fā)者需要對(duì)他們的類進(jìn)行修改以定義新的方法,這不是一個(gè)好辦法。

現(xiàn)在我們需要默認(rèn)方法來(lái)處理這種情況,以避免重寫所有實(shí)現(xiàn)標(biāo)準(zhǔn)拖拉機(jī)接口的類。

在接口中定義默認(rèn)方法,它將在所有實(shí)現(xiàn)拖拉機(jī)接口的類中可用。

三、為什么在 Java 接口中使用靜態(tài)方法?

Java 8 開(kāi)始,接口可以具有靜態(tài)方法。

靜態(tài)方法與類相關(guān)聯(lián),而不與對(duì)象相關(guān)聯(lián)。靜態(tài)方法用作輔助方法。

所以如果我們?cè)诮涌谥新暶黛o態(tài)方法,我們很容易組織我們的輔助方法。

四、場(chǎng)景一:接口中的默認(rèn)方法

為了理解使用默認(rèn)方法,我創(chuàng)建了一個(gè)接口 Village,它有一些方法聲明和一個(gè)默認(rèn)方法。

默認(rèn)方法以 default 關(guān)鍵字開(kāi)頭。

默認(rèn)情況下,接口的所有方法都是公共的,因此無(wú)需使用 public 關(guān)鍵字來(lái)聲明和定義接口中的方法。

Village.java

public interface Village {
    void setNumOfPeople(int num);
    void setName(String name);
    default String getBusinessType(){
        return "Most of the Village people do Farming";
    }
}

創(chuàng)建一個(gè)將實(shí)現(xiàn) Village 接口的 Location 類。

默認(rèn)方法將自動(dòng)在此類中可用。

Location.java

public class Location implements Village {
    public int noOfPeople;
    public String name;
    @Override
    public void setNumOfPeople(int n){
        this.noOfPeople = n;
    }
    @Override
    public void setName(String name){
        this.name = name;
    }
}

為了測(cè)試這個(gè)方案,創(chuàng)建一個(gè)Main類并通過(guò)Location對(duì)象訪問(wèn)默認(rèn)方法。

Main.java

public class Main {
    public static void main(String[] args){
        Location lo = new Location();
        System.out.println(lo.getBusinessType());
    }    
}

輸出

Most of the Village people do Farming

五、場(chǎng)景二:接口中的靜態(tài)方法

現(xiàn)在我們也可以在接口中編寫靜態(tài)方法。在我們的Village接口中,我已經(jīng)將getVillageId()聲明為一個(gè)靜態(tài)方法。

這個(gè)靜態(tài)方法也可以在默認(rèn)方法中被訪問(wèn)。

public interface Village {
    void setNumOfPeople(int num);
    void setName(String name);
    static int getVillageId(){
        return 1;
    }
    default String getBusinessType(){
        return "Business type is Farming  and village id:"+getVillageId();
    }
}

我對(duì)Location類做一些修改,以使用靜態(tài)方法。

我們可以通過(guò)接口名稱來(lái)使用靜態(tài)方法。

public class Location implements Village {
    public int noOfPeople;
    public String name;
    @Override
    public void setNumOfPeople(int n){
        this.noOfPeople = n;
    }
    @Override
    public void setName(String name){
        this.name = name;
    }
    public int getLocationId(){
        return Village.getVillageId();
    }

Main.java

public class Main {
    public static void main(String[] args){
        Location lo = new Location();
        System.out.println(lo.getBusinessType());
        System.out.println("Village id:"+Village.getVillageId());
        System.out.println("Location Id:"+lo.getLocationId());
    }    
}

輸出

Business type is Farming  and village id:1
Village id:1
Location Id:1

六、情景三:多重繼承 - 在兩個(gè)接口中使用相同名稱的默認(rèn)方法

在多重繼承的情況下,一個(gè)類實(shí)現(xiàn)了不止一個(gè)接口,我們需要檢查默認(rèn)方法的行為方式。

現(xiàn)在我正在創(chuàng)建一個(gè)包含getBusinessType()默認(rèn)方法的接口。

City.java

public interface City {
    void setName(String name);
    void setArea(int area);
    default String getBusinessType(){
        return "Service";
    }
}

對(duì)于多重繼承,Location類將同時(shí)實(shí)現(xiàn)VillageCity接口。

由于VillageCity都包含同名的缺省方法,所以由于存在歧義,Location類將強(qiáng)制在類中明確定義缺省方法。

除非我們定義一個(gè)與默認(rèn)方法同名的方法,否則Location類將不會(huì)被編譯。

Location.java

public class Location implements Village, City {
    public int noOfPeople;
    public String name;
     public int area;
    @Override
    public void setNumOfPeople(int n){
        this.noOfPeople = n;
    }
    @Override
    public void setName(String name){
        this.name = name;
    }
    @Override
    public void setArea(int area){
        this.area = area; 
    }
    @Override
    public String getBusinessType(){
        return "People do business like Farming and Service.";
    }
    public int getLocationId(){
        return Village.getVillageId();
    }
}

輸出

People do business like Farming and Service.
Village id:1
Location Id:1

七、參考文獻(xiàn)

【1】Java 8 Default and Static Method in Interface

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

相關(guān)文章

  • Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    invokeBeanFactoryPostProcessors該方法會(huì)實(shí)例化所有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的實(shí)例并且執(zhí)行postProcessBeanFactory與postProcessBeanDefinitionRegistry方法
    2023-01-01
  • 詳細(xì)解讀Druid數(shù)據(jù)庫(kù)連接池的使用

    詳細(xì)解讀Druid數(shù)據(jù)庫(kù)連接池的使用

    這篇文章主要介紹了Druid數(shù)據(jù)庫(kù)連接池的使用,數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè),需要的朋友可以參考下
    2023-03-03
  • idea的運(yùn)行按鈕是灰色問(wèn)題及解決

    idea的運(yùn)行按鈕是灰色問(wèn)題及解決

    這篇文章主要介紹了idea的運(yùn)行按鈕是灰色問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java 三角形類 Triangle的用法詳解

    java 三角形類 Triangle的用法詳解

    這篇文章主要介紹了java 三角形類 Triangle的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Spring MVC全局異常實(shí)例詳解

    Spring MVC全局異常實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC全局異常的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • java中l(wèi)ist使用時(shí)需避免的場(chǎng)景總結(jié)

    java中l(wèi)ist使用時(shí)需避免的場(chǎng)景總結(jié)

    眾所周知,Java為開(kāi)發(fā)者提供了多種集合類的實(shí)現(xiàn),其中幾乎所有業(yè)務(wù)代碼都需要用到List,但List的錯(cuò)誤使用也會(huì)導(dǎo)致諸多問(wèn)題,所以本文我們就來(lái)看一看幾個(gè)錯(cuò)誤使用List的場(chǎng)景吧
    2023-10-10
  • java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器

    java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器

    這篇文章主要為大家介紹了java并發(fā)數(shù)據(jù)包使用數(shù)據(jù)交換器Exchanger來(lái)進(jìn)行線程之間的數(shù)據(jù)交換。有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總

    SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總

    在本篇文章里小編給各位整理的是關(guān)于SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總,有興趣學(xué)習(xí)的參考下。
    2020-02-02
  • Java實(shí)現(xiàn)非阻塞式服務(wù)器的示例代碼

    Java實(shí)現(xiàn)非阻塞式服務(wù)器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的非阻塞式服務(wù)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-05-05
  • java中變量和常量詳解

    java中變量和常量詳解

    這篇文章主要介紹了Java中變量和常量詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論