一.抽象類
定義上來看,被abstract關鍵字修飾的類稱為抽象類。被abstract關鍵字修飾的方法稱為抽象方法。當父類的某些方法,需要聲明,但是又不確定如何實現(xiàn)時,可以將其聲明為抽象方法,那么這個類就是抽象類.例:文章來源:http://www.zghlxwxcb.cn/news/detail-602316.html
[public|protected] abstract class T {
String name;
int age;
abstract public void test();
}
特征:
- 抽象類不可以實例化,可以被繼承,可以看作是對類的進一步抽象,可以繼承普通類或者抽象類
- 抽象類是它的所有子類的公共屬性的集合,可包含多個抽象方法,也可以沒有抽象方法
- 抽象類多用于設計,讓子類繼承并實現(xiàn)抽象類,用來創(chuàng)建繼承層級里子類的模板
- 抽象類可以包含屬性、方法、構造方法,但是構造方法不能用于實例化
- 子類繼承抽象類,必須實現(xiàn)抽象類的所有抽象方法,或者將子類設置成抽象類
- 只要包含一個抽象方法的類必須要定義成抽象類
- 抽象類中的抽象方法只有方法的聲明,只是起到一個限制的作用,并沒有提供實際的方法體,這也要求子類去實現(xiàn)自己的方法體
- abstract關鍵字只能修飾類和方法
- 抽象方法不可以用private、static、final來修飾,與重寫相違背
二.接口
定義上來看,接口使用interface關鍵字修飾。接口就是給出一些無法實現(xiàn)的方法,封裝在一起,到某個類要使用的時候,根據(jù)情況重新寫出來。如果一個類實現(xiàn)了某個接口,那么它就繼承了這個接口的抽象方法。例:文章來源地址http://www.zghlxwxcb.cn/news/detail-602316.html
interface IAI{
String name="Jack";
int age=12;
default void iac(){
System.out.println(1);
};
static void iab(){
System.out.println(2);
}
}
class TA implements IAI{
public static void main(String[] args) {
IAI iai=new TA();
iai.iac(); //1
IAI.iab(); //2
}
}
特征:
- 接口不可以實例化
- 接口中所有的方法都是public方法,接口的抽象方法可以不用abstract修飾
- 實現(xiàn)接口的子類必須實現(xiàn)所有的抽象方法,除非是抽象類
- 接口可以被接口繼承,或者被其他類實現(xiàn)
- 一個類可以實現(xiàn)多個接口,子類通過implements關鍵字來實現(xiàn)
- 接口中的屬性必須是final的,而且隱含的是public static final修飾符,必須顯示的初始化
- 接口屬性的訪問形式:接口名.屬性名,接口的static修飾的方法訪問形式:接口名.方法名
- 接口方法必須用static或者default修飾詞修飾
三.區(qū)別
相同:
- 都不能被實例化
- 接口的實現(xiàn)類或抽象類的子類都只有實現(xiàn)了接口或抽象類中的方法后才能實例化
- 抽象類和接口都是用來抽象具體對象的,要面向接口(抽象)編程,而不要面向具體編程。雖然都進行了不同程度的抽象,但是接口的抽象級別最高
不同:
- 抽象類是對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象
- 抽象類是自底向上抽象而來的,接口是自頂向下設計出來的
- 抽象類要被子類繼承,而接口是用來被子類實現(xiàn)的
- 接口只能做方法聲明,不能有方法的實現(xiàn),抽象類中不僅可以作方法聲明,也可以做方法實現(xiàn)
- 實現(xiàn)接口的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現(xiàn)多個接口,但一個類只能繼承一個抽象類。對于java的單繼承的一種補充
- 抽象類有構造器,接口沒有構造器,只能重寫方法
- 抽象類可以有普通的屬性,也可以有public static final修飾的屬性,而接口所有的屬性都是public static final修飾的。
到了這里,關于Java中抽象類和接口的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!