接口(interface)和抽象類(abstract class)都是Java中用來實(shí)現(xiàn)多態(tài)性的機(jī)制。它們的區(qū)別如下:
1.定義:抽象類是一個類,可以有普通方法和抽象方法,其中抽象方法必須被子類實(shí)現(xiàn);接口是一組抽象方法的集合,所有方法都是抽象方法,且沒有具體實(shí)現(xiàn)。
2.實(shí)現(xiàn):子類只能繼承一個抽象類,但可以實(shí)現(xiàn)多個接口。
3.構(gòu)造函數(shù):抽象類可以有構(gòu)造函數(shù),接口沒有構(gòu)造函數(shù)。
4.變量:抽象類可以有變量,接口只能定義常量。
5.訪問控制:抽象類中的方法可以是public、protected和default訪問控制,而接口中的方法默認(rèn)是public。
6.默認(rèn)實(shí)現(xiàn):抽象類可以有普通方法的默認(rèn)實(shí)現(xiàn),而接口中所有的方法都沒有默認(rèn)實(shí)現(xiàn)。
7.繼承:子類繼承抽象類時(shí)必須實(shí)現(xiàn)其中的抽象方法,否則該子類也必須是抽象類;子類實(shí)現(xiàn)接口時(shí)必須實(shí)現(xiàn)其中的所有方法。
總之,抽象類是對類抽象,接口是對行為抽象。如果一個類具有一些共同的屬性和行為,那么可以將這些共同的屬性和行為放到抽象類中,讓子類繼承并實(shí)現(xiàn)其中的抽象方法。如果一個類只是具有一些共同的行為,那么可以將這些共同的行為定義到接口中,讓實(shí)現(xiàn)該接口的類來實(shí)現(xiàn)其中的方法。