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

本篇內(nèi)容介紹了“Java的默認(rèn)和靜態(tài)方法簡(jiǎn)單介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、錦江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

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),多舒服哦。

“Java的默認(rèn)和靜態(tài)方法簡(jiǎn)單介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站標(biāo)題:Java的默認(rèn)和靜態(tài)方法簡(jiǎn)單介紹
分享鏈接:http://bm7419.com/article14/jdidge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、小程序開(kāi)發(fā)做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作