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

簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法

 更新時(shí)間:2020年01月03日 09:19:43   作者:天喬巴夏丶  
這篇文章主要介紹了簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

淺談Java的默認(rèn)和靜態(tài)方法

允許在接口中聲明默認(rèn)方法和靜態(tài)方法,是JDK1.8新增的特性。存在即合理,兩者的出現(xiàn),讓接口越來(lái)越像抽象類(lèi),那么它們?yōu)槭裁闯霈F(xiàn)呢,它們的出現(xiàn)產(chǎn)生了哪些便利,Java小白開(kāi)始學(xué)習(xí)并總結(jié),不足之處,還望評(píng)論區(qū)指點(diǎn)一二!

Java新增默認(rèn)方法有啥用

官方解答:默認(rèn)方法允許您添加新的功能到現(xiàn)有庫(kù)的接口中,并能確保與采用舊版本接口編寫(xiě)的代碼的二進(jìn)制兼容性。
這個(gè)光看枯燥的介紹好像很難理解,舉個(gè)簡(jiǎn)單的例子。假設(shè)有一個(gè)很大很大的項(xiàng)目,一個(gè)接口被很多很多的類(lèi)所實(shí)現(xiàn),大家都平安無(wú)事平穩(wěn)地運(yùn)行著。突然有一天,出現(xiàn)了一個(gè)小小地問(wèn)題,或者說(shuō)有一個(gè)更好的優(yōu)化方案,需要在這些實(shí)現(xiàn)類(lèi)去增加。在默認(rèn)方法出現(xiàn)之前,只有抽象方法,且需要在實(shí)現(xiàn)類(lèi)中給出具體定義才能操作,那豈不是只能兩眼一閉,直接從早干到晚地添加啦。

但是,默認(rèn)方法地出現(xiàn)允許在接口中給出方法的具體實(shí)現(xiàn),且實(shí)現(xiàn)類(lèi)中能夠自動(dòng)實(shí)現(xiàn)默認(rèn)方法,我只需要將這個(gè)優(yōu)化放在接口的默認(rèn)方法里面,就能完成對(duì)所有實(shí)現(xiàn)類(lèi)的優(yōu)化啦。當(dāng)然,純屬個(gè)人理解,如果我的例子有不恰當(dāng)?shù)牡胤?,歡迎指正哦。

package com.my.pac21;

/**
 * @auther Summerday
 */

interface Closable {
  void close();
  //假設(shè)是新增的默認(rèn)方法
  default void makeSound() {
    System.out.println("peng!");
  }
}

interface Openable {
  default void makeSound() {
    System.out.println("peng!");
  }
}

class Window implements Closable {

  @Override
  public void close() {
    System.out.println("Window.close");
  }
}

public class Door implements Closable, Openable {

  @Override
  public void close() {
    System.out.println("Door.close");
  }

  //兩個(gè)接口中包含同名的方法,需要重寫(xiě),指定一個(gè)
  @Override
  public void makeSound() {
    System.out.println("need to override default methods");
  }

  public static void main(String[] args) {
    Closable cw = new Window();
    Closable cd = new Door();
    cw.close();//Window.close
    cd.close();//Door.close

    //實(shí)現(xiàn)默認(rèn)方法
    cw.makeSound();//peng!
    cd.makeSound();//need to override default methods
  }
}

Java新增的靜態(tài)方法有啥用

默認(rèn)方法和靜態(tài)方法的在接口的出現(xiàn)讓接口失去“全是抽象方法”的特性,在探究完新增的默認(rèn)方法之后,我們?cè)搶?duì)靜態(tài)方法下手啦。開(kāi)始瘋狂查找資料。。。

Before Java 8 made it possible to declare static methods in interfaces, it was common practice to place these methods in companion utility classes. For example, the java.util.Collections class is a companion to the java.util.Collection interface, and declares static methods that would be more appropriate in the relevant Java Collections Framework interfaces. You no longer need to provide your own companion utility classes. Instead, you can place static methods in the appropriate interfaces, which is a good habit to cultivate.

這個(gè)是我在stack overflow上找到的答案,什么意思呢,在沒(méi)有新增靜態(tài)方法之前,我們?nèi)绻胱屢恍┕潭ǖ牟僮髟诮涌谥谐霈F(xiàn),就必須定義一個(gè)和接口配套的實(shí)現(xiàn)類(lèi)。而接口中靜態(tài)方法的出現(xiàn),可以直接通過(guò)接口調(diào)用靜態(tài)方法。

package com.my.pac21;

/**
 * @auther Summerday
 */
public class Test {
  public static void main(String[] args) {
    int val1 = 5;
    int val2 = 6;
    //通過(guò)創(chuàng)建實(shí)現(xiàn)類(lèi)的對(duì)象
    Countable b = new CountableCompanion();
    System.out.println(b.getNum(val1, val2));
    //直接通過(guò)接口調(diào)用
    Countable.getMul(val1,val2);
  }
}
interface Countable{
  //普通抽象方法
  int getNum(int a,int b);
  //靜態(tài)方法
  static int getMul(int a,int b){
    return a*b;
  }
}
//實(shí)現(xiàn)接口的實(shí)現(xiàn)類(lèi)
class CountableCompanion implements Countable{
  @Override
  public int getNum(int a,int b) {
    return a+b;
  }
}

這是一個(gè)我自認(rèn)為還比較幼稚的例子,僅供理解。

普通抽象方法的情況:我在接口中定義了一個(gè)抽象方法,而后我又定義了實(shí)現(xiàn)該方法的實(shí)現(xiàn)類(lèi),最后通過(guò)創(chuàng)建實(shí)現(xiàn)類(lèi)的實(shí)例來(lái)調(diào)用該方法,最后算得兩值之和。可以想象,在實(shí)際中,如果相同性質(zhì)的方法想要在多個(gè)實(shí)現(xiàn)類(lèi)中實(shí)現(xiàn),這種做法是比較麻煩的。

靜態(tài)方法的情況:就很直接地在接口中定義靜態(tài)方法,且可以被接口直接調(diào)用,不需要再定義與其配套的實(shí)現(xiàn)類(lèi),多舒服哦。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java8?CompletableFuture?異步多線(xiàn)程的實(shí)現(xiàn)

    Java8?CompletableFuture?異步多線(xiàn)程的實(shí)現(xiàn)

    本文主要介紹了Java8?CompletableFuture?異步多線(xiàn)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java遞歸算法詳解(動(dòng)力節(jié)點(diǎn)整理)

    Java遞歸算法詳解(動(dòng)力節(jié)點(diǎn)整理)

    Java遞歸算法是基于Java語(yǔ)言實(shí)現(xiàn)的遞歸算法。遞歸算法對(duì)解決一大類(lèi)問(wèn)題很有效,它可以使算法簡(jiǎn)潔和易于理解。接下來(lái)通過(guò)本文給大家介紹Java遞歸算法相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2017-03-03
  • SpringBoot 動(dòng)態(tài)配置郵箱發(fā)件人過(guò)程解析

    SpringBoot 動(dòng)態(tài)配置郵箱發(fā)件人過(guò)程解析

    這篇文章主要介紹了SpringBoot 動(dòng)態(tài)配置郵箱發(fā)件人過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • java sql ResultSet 之getRow()用法說(shuō)明

    java sql ResultSet 之getRow()用法說(shuō)明

    這篇文章主要介紹了java sql ResultSet 之getRow()用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 基于java配置nginx獲取真實(shí)IP代碼實(shí)例

    基于java配置nginx獲取真實(shí)IP代碼實(shí)例

    這篇文章主要介紹了基于java配置nginx獲取真實(shí)IP代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 如何在IDEA中快速解決Jar沖突詳解

    如何在IDEA中快速解決Jar沖突詳解

    相信很多同學(xué)在過(guò)去做項(xiàng)目都遇到過(guò)Jar沖突的問(wèn)題,在本地環(huán)境沒(méi)問(wèn)題,一旦部署到測(cè)試或生產(chǎn)環(huán)境突然就啟動(dòng)報(bào)錯(cuò),報(bào)類(lèi)似classNotFound的Exception,本文詳細(xì)整理了如何在IDEA中快速解決Jar沖突,需要的朋友可以參考下
    2021-06-06
  • 分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證

    分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證

    這篇文章主要為大家介紹分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證的詳解說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 如何基于springboot-admin實(shí)現(xiàn)后臺(tái)監(jiān)控

    如何基于springboot-admin實(shí)現(xiàn)后臺(tái)監(jiān)控

    這篇文章主要介紹了如何基于springboot-admin實(shí)現(xiàn)后臺(tái)監(jiān)控,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java使用正則表達(dá)式判斷字符串是否以字符開(kāi)始

    Java使用正則表達(dá)式判斷字符串是否以字符開(kāi)始

    這篇文章主要介紹了Java使用正則表達(dá)式判斷字符串是否以字符開(kāi)始的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • mybatis中<if>標(biāo)簽bool值類(lèi)型為false判斷方法

    mybatis中<if>標(biāo)簽bool值類(lèi)型為false判斷方法

    這篇文章主要給大家介紹了關(guān)于mybatis中<if>標(biāo)簽bool值類(lèi)型為false判斷方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

灵石县| 贞丰县| 丹江口市| 花莲市| 南溪县| 勃利县| 霞浦县| 玛曲县| 垦利县| 苗栗市| 巴彦淖尔市| 泌阳县| 潼南县| 西城区| 靖江市| 淄博市| 班玛县| 娱乐| 军事| 德化县| 辽阳市| 平度市| 呼玛县| 兰坪| 安国市| 霍城县| 手游| 茂名市| 扶余县| 迁安市| 沁源县| 阿克| 昭通市| 三亚市| 铁岭市| 乌鲁木齐市| 日照市| 芜湖县| 铜川市| 孟州市| 定边县|