剛學習java的時候,總覺得介面和抽象類很像,但又說不上具體有什麼區別。今天靜下來,翻翻書,查查資料,做個小結。首先舉兩個例子,看看interface和abstract class 在“外形”上有啥異同。 1、先看一下抽象類: 抽象類的主要特征有兩個: 一、申明類的時候添加abstract關鍵字。二 ...
剛學習java的時候,總覺得介面和抽象類很像,但又說不上具體有什麼區別。今天靜下來,翻翻書,查查資料,做個小結。首先舉兩個例子,看看interface和abstract class 在“外形”上有啥異同。
1、先看一下抽象類:
abstract class Person{
private String name;
private Person(String n)
{
name=n;
}
public abstract String getDescription();
public String getName()
{
return name;
}
}
抽象類的主要特征有兩個: 一、申明類的時候添加abstract關鍵字。二、有抽象方法。
抽象方法:只有申明,沒有函數體。例如上面的例子,對人(Person)的描述不能一概而論,對於學生,對於老師,對於醫生。。。。。。所以在這種情況下可以定義為抽象方法,抽象方法可以(必須)在繼承它的子類中實現。抽象類中可以有域(屬性),也可以有完整的方法,除了有抽象方法外,與普通類沒什麼區別。值得註意的是,由於抽象類不完整、具有不確定性,是不能實例化的,只能作為基類被繼承。
2、再看一下介面
interface Usb{
int numbers=2;//自動定義類型為 static final
void toKeyboard();//自動定義為public 類型
void toMouse();//自動定義為public 類型
}
介面也可以定義為public類型,但是和類一樣,必須保證所在文件的名字和介面名一直。如果不加public,那麼該介面僅面向同包的類。雖然interface取代了class關鍵字,但我還是有一個疑問,介面是不是也是一種類?後來查閱發現:
介面和類同屬於引用數據類型,是併列的。
3、總結抽象類和介面的區別
(1)抽象類和介面,都是抽象思想的體現,抽象類是對類的抽象,介面是對“可以實現的功能”的抽象,就是說通過介面,我可以實現某種功能,不是天生的,但是可以學。舉個例子,例如在抽象電腦這個客觀存在的事物時,可以把它設計成Computer類,我們還可以設計一個USB介面,讓他接個滑鼠和鍵盤,這樣就具有了輸入的功能。而電腦與生俱來的功能,例如顯示屏顯示信息,cpu計算結果,內部電路晶元等,可以封裝在Computer類裡面。
(2)介面相對於抽象類來說,更加抽象。這個從形式上就可以看出。介面中的的方法必須是抽象方法,但是抽象類的方法可以是完整(有方法體)的。
(3)抽象類說到底還是一個類啊,java中是不支持多繼承的,雖然這麼做確實降低了程式設計的複雜性,但只能繼承一個類可能不一定能滿足得了實際開發上的需求。那麼介面(interface)在某種度上彌補了這種缺陷,因為它是可以被多個類實現(implements)的。
部分內容參考書籍:《thinking in java》、《java核心技術捲一》
參考博客:http://www.cnblogs.com/dolphin0520/p/3811437.html
如有錯誤,歡迎批評指正。