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