2021-02-27 分類: 網站建設
在Java中可以用接口和抽象類來定義允許有多個實現的類型;不過,接口和抽象類有兩個主要的不同:
在實際開發中,我們應該遵循一個原則——接口優于抽象類,主要是由于接口有三個方面的優勢:
Java中的抽象類
抽象類的設計理念介于普通的類與接口之間,抽象類的目標是為了設計一個通用的、允許有多個實現的類型。
包含抽象方法的類叫做抽象類;抽象類無法實例化,如果一個類繼承了某個抽象類,并且想實例化,就需要實現抽象類中的所有抽象方法。
抽象類在Java中的應用,最經典的是“骨架模式”——和接口配合使用,讓設計同時具備抽象類和接口的優點——抽象類的演變比接口的演變要容易,同時允許系統中的其他類不使用這個骨架實現類。
在“骨架模式”中,接口的作用仍然是定義類型,骨架實現類就是一個抽象類,負責所有與接口實現相關的工作。集合框架中大量應用了“骨架模式”,例如:AbstractCollection、AbstractList、AbstractMap和AbstractSet,將一些通用的操作都放在骨架實現類中實現,這樣具體的ArrayList和LinkedList就可以專注于自己的特性的實現,避免寫重復代碼。
“骨架模式”聽起來有點像設計模式中的模板方法,不過二者之間還是有不一樣的:“骨架模式”的目標是從代碼層面避免重復代碼,“模板方法”的目標是在設計層面對某一類事情的抽象和擴展點的設計。
Java中的接口
在Java中接口的語義是“is like”——任何實現了某個接口的類,看起來就像具備了這個接口的能力。
在Java中,接口可以用來做三個事情:
不過在《Effective Java》的第19條指出,接口應該只用于定義類型。
在Java8之前,接口中只能出現方法的聲明,不能出現方法的實現。Java 8對接口的能力做了增強:
1.
Java 8中引入default method最主要的動機是:在Java 8中要支持lambda表達式,這就需要對原來JDK中的很多接口做修改,但是由于接口的特性(其實現類必須實現接口中聲明的所有方法)的限制,如果直接修改,就會導致現有的Java應用在升級到Java 8的時候全部編譯報錯——這是不可接受的。
在實際開發中,對于default method的使用你可以注意幾個點:
2
跟default method類似,static method也可以在接口中實現,但是你在使用過程中不能覆蓋static method,因此,如果有些方法你不希望被具體的實現類破壞,就可以將之聲明為static method。
在實際開發中,對于static method的使用你可以注意幾個點:
3
為了支持lambda表達式,Java 8引入了一個新的注解:
@FunctionalInterface //方法注解如果某個接口被這個注解修飾,這個接口就會被稱為函數式接口。函數式接口注解不是必須的,但是是一種好的實踐。
如果一個接口符合"函數式接口"定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式接口,但是加上了@FunctionInterface,那么編譯器會報錯。。
網頁標題:程序員必備知識點:接口和抽象類有什么區別?
網頁地址:http://m.newbst.com/news5/103205.html
成都網站建設公司_創新互聯,為您提供服務器托管、自適應網站、網站改版、企業網站制作、網站設計、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容