接口(interface)和抽象類(abstract class)是支持抽象類定義的兩種機制。
具體而言,接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的。而抽象類是可以有私有方法或私有變量的,如果一個類中包含抽象方法,那么這個類就是抽象類。
在java語言中,可以通過把類或者類中的某些方法聲明為abstract來表示一個類是抽象類。接口就是指一個方法的集合,接口中所有的方法都沒有方法體,在java語言中,接口是通過關鍵字inteface來實現的。
接口與抽象類的相同點:
1.都不能被實例化;
2.接口的實現類或抽象類的子類,都只有實現了接口或抽象類中的方法后才能被實現;
接口與抽象類的不同點:
1.接口只有定義,不能有方法的實現,抽象類可以有定義與實現,即其方法可以在抽象類中被實現;
2.實現接口的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個接口,但一個類只能繼承一個抽象類。因此使用接口可以達到多繼承的目的。
3.接口強調特定功能的視線,設計理念為"like-a"關系,抽象類強調所屬關系,設計理念為:"is-a"關系;
4.接口中定義的成員變量默認為public static final,只能有靜態的不能被修改的數據成員,而且必須給其賦初值,其所有的成員方法都是public,abstract,而且只能被這兩個關鍵字修飾。
而抽象類可以有自己的數據成員變量,也可以有非抽象的成員方法,而且,抽象類中的成員變量默認為default,當然也可以定義為private,protected和public,這些成員變量可以在子類中重新被定義,也可以被重新賦值,抽象類中的抽象方法,不能用private,static,synchronized和native等訪問修飾符修飾,同時必須以分號結尾,并且不帶花括號。所以當功能需要積累時,使用抽象類;不需要積累時,使用接口;
5.接口運用于實現比較常用的功能,便于日后維護和添加刪除方法;抽象類更傾向于充當公共類的角色,不適用于日后重新對里面的代碼進行維護。
本文來自博客園,作者:{不二一哥},轉載請注明原文鏈接:http://www.rzrgm.cn/yige888/p/17991152
浙公網安備 33010602011771號