抽象類和介面都體現了oop的抽象,兩者之間有很多相似之處,但同時又有許多的不同之處。容易弄混淆,今天就簡單的說一下兩者之間的區別於相似之處吧!
一.抽象類與基本類
抽象方法:
抽象方法是一種特殊的方法,只有方法的申明,並沒有具體的實現
public abstract classname
抽象類就是指包含有抽象方法的類,抽象類必須用abstract關鍵字修飾,抽象方法也必須用abstract關鍵字修飾。由於抽象類中存在沒有具體實現的方法,所以抽象類不能建立物件。
抽象類除了具有抽象方法之外與其他普通的類沒有任何區別,也就是意味著抽象類可以具有成員變數和普通的成員方法。因此,抽象類和普通類的區別在於:
1)抽象類必須有抽象方法,抽象方法必須用public(protected) abstract來修飾,預設的情況下一般認為是public的。
2)不能建立抽象類的物件
3)子類繼承抽象類,必須實現抽象類的抽象方法,否則這個子類也是抽象類。
二.介面
inte***ce
介面中可以有變數和方法,介面中的變數必須是用public static final 來修飾,介面中的方法必須是抽象的,只能用public abstract來修飾。
[public] inte***ce inte***cename
非抽象類實現了介面之後必須實現介面中的抽象方法,但是如果乙個抽象類實現了介面,可以不實現介面中的抽象方法。
三.抽象類與介面的區別:
1.語法層面上的區別:
1)抽象類可以有普通成員方法,介面只能有抽象方法。
2)抽象類中的變數可以是任意的,但是介面中的變數只能是public static final來修飾的
3)抽象類中可以有靜態方法和靜態**塊,但是介面中不能有靜態**塊或者是靜態方法
4)抽象類是單繼承的但是介面是多實現的
2.設計層面上的區別:
抽象類是對事務整體的抽象,而介面只是對行為的抽象。比如說汽車和火車都能抽象為乙個類,他們都有行駛的功能,我們可以把行駛作為乙個介面,用汽車和貨車來實現這個介面。抽象類描述的是」是不是「,而介面描述的是」有沒有「。
如果乙個類a繼承了抽象類b,但是又對b中的方法不滿意,那麼我們可以在b中修改抽象方法(所有子類的公共方法),但是a中的**卻不需要改動。如果乙個介面c中的方法做了更改,那麼所有實現這個介面的非抽象方法都必須做出相應的改動。抽象類是一種模板式的定義,而介面則是一種規範的定義。
java中抽象類和介面的區別
1 概念 抽象類 abstract class 宣告方法的存在但不去實現它的類叫做抽象類。抽象類中可以有實現了的方法,也可以沒有實現了的方法 抽象類中可以沒有抽象的方法,但有抽象方法的類一定是抽象類。抽象類與普通類最大的區別是它不能被直接例項化,只能通過子類間接例項化。介面 inte ce 是抽象類...
JAVA 中 抽象類和介面的區別
含有abstract修飾符的class 即為抽象類,abstract類不能建立例項物件,含有abstract的方法的類必須定義為abstract class abstract class 裡的方法不必是抽象的,抽象來中定義抽象方法必須放在具體子類中實現,所以呀,不能有抽象的構造方法或抽象的靜態方法,...
java中抽象類和介面的區別
在物件導向的概念中,我們知道所有的物件都是通過類來描繪的,但是並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵我們在對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它...