default怎麼修飾介面中的方法詳解

2022-10-04 11:48:18 字數 1397 閱讀 9036

在實現handlerinterceptor介面時,我發現不實現handlerinterceptor介面的方法也不會報錯

仔細想來,還是我對介面的理解不清晰。

開啟原始碼發現handlerinterceptor介面中的方法都是default

在以前的介面編寫中,我總是省略許可權修飾符,因為在介面中的方法中預設是public abstract。

那麼再來對介面進行總結。

那麼也就是www.cppcns.com說,實現類要覆蓋介面中的抽象方法就能例項化,而handlerinterceptor介面中的方法都是default

在jdk8增加的default修飾介面方法時,有什麼作用呢?

實現類會繼承介面中的default方法

還有兩個要注意的點

一言以蔽之,更接近實現類的優先順序更高,如: 實現類 > 抽象類 > 介面

1. 如果乙個類同時實現介面awww.cppcns.com和b,介面a和b中有相同的default方法,這時,該類必須重寫介面中的default方法

2. 如果子類繼承父類,父類中有b方法,該子類同時實現的介面中也有b方法(被default修飾),那麼子類會繼承父類的b方法而不是繼承介面中的b方法

在學習c++時,多繼承會帶來非常著名的菱形繼承問題

那麼為什麼j**a介面為何能多繼承?

1.j**a介面是行為性的,也就是說介面只是定義某個行為的名稱2.具體的實現動作,都在實現類本身這裡。從jdk8開始,介面中可以寫default方法了。這其實是j**a自己就給自己出了乙個問題。

介面可以書寫預設方法了,然後又因為介面之間是可以多繼承的,因而實質上j**a 8的介面多繼承其實也會涉及到實現多繼承的問題。

解決介面default方法衝突的三步驟:

總之,j**a8在語言層面上,對若出現介面default方法衝突的解決方案是:不作為。其實不作為也是一種作為,它讓編譯器去提示呼叫者必須顯示的override這個衝突的方法,讓coder自己去決定呼叫邏輯

如果現在問我介面和抽象類有什麼區別,我會覺得去說兩者之間具體的使用細節是捨本逐末了,應該從設計理念出發。

於是引出我對此的理解。

抽象類:抽象體,對於個體(事物)的抽象。

介面:抽象面,對於事物某一特性(行為程式設計客棧)的抽象。介面只是定義某個行為的名稱。

在j**a的設計中,經常可以看到兩者組合起來使用。如servlet

什麼叫servlet?實現了servlet介面的類就是乙個servlet。

可以發現,抽象類genericservlet實現了servlet介面。

介面的好處是什麼?

規範。抽象類的好處是什麼?

捕捉子類的通用特性,減少冗餘**,同時起到規範的作用。

這樣兩者結合起來的好處是什麼(genericservlet)?

規範,同時減少了程式設計人員的所需要編寫的**,抽象類給出模板。

介面中的default方法 預設方法

一 概念 1.介面提供乙個預設實現的方法,並且不強制實現類重寫此方法 2.預設方法使用default關鍵字來修飾 二 引入背景 1.當乙個介面新增新方法時,需要所有的實現類都重寫新方法,影響到了已有的實現類,可能導致應用崩潰 2.預設方法可以不強制重寫,也不會影響到已有的實現類 3.例如iterab...

介面以及介面中的方法能被哪些修飾符修飾

當我給介面新增final修飾符時顯示錯誤資訊 illegal modifier for the inte ce inte cetest only public abstract are permitted 即介面只能被public,abstract修飾符修飾,介面被設計的目的主要就是為了被繼承,fi...

關於switch中的default

注意,default語句不是必須放在case語句的結尾處出現。例子程式 int i 9 switch i 輸出 default,zero switch的執行是按照從小到大的順序執行的,最後執行default語句,如果default後面帶有break,那麼程式就會正常跳出switch,否則,程式會繼續...