含有 abstract修飾符的 class即為抽象類, abstract 類不能建立的例項物件。含有類不能建立的例項物件。含有abstract方法的類必須 定義為 abstract class類中定義抽象方法必須在具體子類中實現, 所以,不能有抽象構造方法或靜態方法。如果的子類沒實現父中所有抽象方法,那麼子類也必須定義為abstract型別。
介面(inte***ce)可以說成是抽象類的 一種特例,介面中所有方法都必須是抽象的。介面中的方法預設定義為public abstract型別, 介面中的成員變數型別預設為public static final。
下面比較一兩者的語法區別:
異同點:
1).抽象類可以有實現(包括建構函式),而介面不可以有任何實現,重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。介面中所有方法都必須是未實現的。
2).抽象類中還以有成員變數(包含靜態成員變數)、屬性、常量和靜態方法,並且他們可以是非公共的;而介面中不能有成員變數、常量、靜態方法,只能有公共的屬性。
3).抽象類可以從另乙個類或者乙個/ 多個介面派生;而介面不能從另乙個類派生卻可以實現另乙個或多個介面
相同點:
1)、不能例項化;
2)、包含未實現的方法宣告;
3)、派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員);
下面用簡單的案例來看下:
抽象類:
public abstract class testcxl
/*** 抽象類可以有實現(包括建構函式)
* @return
*/public string method1()
/*** 抽象類中還可以有靜態方法
* @return
*/public static string method2()
/*** abstract class 和 inte***ce有什麼異同?
*//**
* 抽象類可以包括抽象方法,這是普通類所不能的
* 抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們
* @return
*/public abstract string method3();
/*** 相同點:1)、不能例項化;
2)、包含未實現的方法宣告;
3)、派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員);
抽象類和介面的使用:
1)如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制項版本。
2)如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。
3)如果要設計大的功能單元,則使用抽象類.如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。
4)抽象類主要用於關係密切的物件;而介面適合為不相關的類提供通用功能。
*/}
介面:
public inte***ce testjk
派生類:
public class testcxlpc extends testcxl
}
java抽象類與介面的區別抽象類與介面的特性是什麼
介面和抽象類的概念不一樣。介面是對動作的抽象,抽象類是對根源的抽象。抽象類表示的是個物件,什麼物件。介面表示的是物件的功能,能做什麼。舉個例子 男人 物件 和女人 物件 這兩個類 物件 他們可以抽象為人。公貓和母貓可以抽象為貓。人可以吃飯,可以睡覺,貓呢也可以吃飯和睡覺,那麼這個 吃飯 睡覺 就是某...
抽象類與介面的區別
c 中可以多繼承介面,卻只能繼承自乙個抽象類 抽象類中的方法可以包含一些實現,但介面卻只能定義方法的一種規範,不能包含實現 繼承類必須實現藉口中所有的方法,而不一定要實現抽象類中的所有方法 抽象類可以繼承自抽象類 但介面不能繼承自介面 派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員 ...
抽象類與介面的區別
c 中可以多繼承介面,卻只能繼承自乙個抽象類 抽象類中的方法可以包含一些實現,但介面卻只能定義方法的一種規範,不能包含實現 繼承類必須實現藉口中所有的方法,而不一定要實現抽象類中的所有方法 抽象類可以繼承自抽象類 但介面不能繼承自介面 派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員 ...