如果一個類中包含抽象方法。那么這個類就是抽象類驯嘱。
在java中镶苞,可以把類或類中的方法聲明為abstract來表示一個類是抽象類。
只要包含一個抽象方法的類就必須倍聲明為抽象類鞠评。抽象類可以聲明方法的存在而不去實現(xiàn)它茂蚓,被聲明為抽象的方法不能包含方法體。在實現(xiàn)抽象方法時剃幌,必須包含相同或者更低的訪問級別(public→protected→private)抽象類在使用過程中不能被實例化聋涨,但是可以創(chuàng)建一個對象,使其指向具體子類的一個實例牍白。抽象類的子類為父類中所有抽象方法提供具體的實現(xiàn)础芍,否則它們也是抽象類右蹦。
接口(interface)就是指一個方法的集合,接口中的所有方法都沒有方法體淘这。
接口可以看作抽象類的變體曙聂。接口中的所有方法都是抽象的,可以通過接口來間接實現(xiàn)多重繼承坐漏。接口中的成員變量都是static final類型音婶。
接口與抽象類的相同點:
1.都不能被實例化碴卧。
2.接口的實現(xiàn)類或抽象類的子類都只有實現(xiàn)了接口或抽象類中的方法后才能被實例化。
接口與抽象類的不同點:
1.接口只有定義,其方法不能在接口中實現(xiàn),而抽象類可以有定義與實現(xiàn),即其方法可以在抽象類中被實現(xiàn)。
2.接口需要實現(xiàn)(implements)吱窝,抽象類只能被繼承(extends)系宜。一個類可以實現(xiàn)多個接口,但一個類只能繼承一個抽象類。
3.接口強調特定功能的實現(xiàn)苛秕,而抽象類強調所屬關系肌访。
4.接口中定義的成員變量默認為public static final,只能怪有靜態(tài)的不能被修改的數(shù)據成員艇劫,而且必須給其賦初值吼驶,其所有成員方法都是public,abstract的店煞。且只能被這兩個關鍵字修飾蟹演。
而抽象類可以有自己的數(shù)據成員變量,也可以有非抽象的成員方法浅缸,而且抽象類的成員變量可以被定義為private,protected,public轨帜。這些成員變量可以在子類中被重新定義,也可以被重新賦值衩椒。抽象類的抽象方法不能用private,static,synchronized,native等訪問修飾符修飾蚌父,同時其方法必須以分號結尾,并且不帶花括號毛萌。
5.接口運用于實現(xiàn)比較常用的功能苟弛,便于日后維護;抽象類傾向于充當公共類的角色阁将,不適用日后對里面代碼的維護膏秫。