類是物件的模板,抽象類和介面可以看做是具體的類的模板。
由於從某種角度講,介面是一種特殊的抽象類,它們的淵源頗深,有很大的相似之處,所以在選擇使用誰的問題上很容易迷糊。我們首先分析它們具有的相同點。
下面說一下抽象類和介面的主要區別。
1) 抽象類可以為部分方法提供實現,避免了在子類中重複實現這些方法,提高了**的可重用性,這是抽象類的優勢;而介面中只能包含抽象方法,不能包含任何實現。
1public
abstract
classa6
}7public
class b extendsa11
}12public
class c extends
a16 }
抽象類a有兩個子類b、c,由於a中有方法method2的實現,子類b、c中不需要重寫method2方法,我們就說a為子類提供了公共的功能,或a約束了子類的行為。method2就是**可重用的例子。a 並沒有定義 method1的實現,也就是說b、c 可以根據自己的特點實現method1方法,這又體現了鬆散耦合的特性。
再換成介面看看:
1public
inte***cea5
public
class b implementsa9
public
void
method2()12}
13public
class c implementsa17
public
void
method2()
20 }
介面a無法為實現類b、c提供公共的功能,也就是說a無法約束b、c的行為。b、c可以自由地發揮自己的特點現實 method1和 method2方法,介面a毫無掌控能力。
2) 乙個類只能繼承乙個直接的父類(可能是抽象類),但乙個類可以實現多個介面,這個就是介面的優勢。
1inte***cea4
inte***ceb7
class c implements
a,b11
public
void
method2()14}
15//
可以如此靈活的使用c,並且c還有機會進行擴充套件,實現其他介面
16 a a=new
c();
17 b b=new
c();
18abstract
classa21
abstract
class b extendsa24
class c extendsb28
public
void
method2()
31 }
對於c類,將沒有機會繼承其他父類了。
介面可以多繼承;
介面:jiekou
publicinte***ce
jiekou
inte***ce
j2 inte***ce j3 extends
j2, jiekou
class tjie implements
j3 @override
public
void
a3()
@override
public
void
a1()
@override
public
void
a2()
@override
public
void
a4()
}
測試類:
publicclass
testjiekou
public
static
void
main(string args)
}
綜上所述,介面和抽象類各有優缺點,在介面和抽象類的選擇上,必須遵守這樣乙個原則:
posted @
2017-05-31 10:12
路迢迢 閱讀(
...)
編輯收藏
Java抽象類與介面
一.概念 在物件導向的概念中,我們知道所有的物件都是通過類來描繪的,但是反過來卻不是這樣。並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。比如 如果我們進行乙個圖形編輯軟體的開發,就會發現問題領域存在著圓 三角形這樣一些具體概念。它們是不同的...
JAVA抽象類與介面
抽象方法 使用abstract關鍵字修飾的方法,沒有方法體,抽象方法只能使用public 或者protected修飾。public abstract void fun 抽象類 使用abstract關鍵字修飾的類 包含抽象方法的類是抽象類 抽象類可以不包含抽象方法 抽象類只能被繼承,不能自己建立例項 ...
Java 抽象類 與 介面
如果乙個類含有抽象方法,則稱這個類是抽象類,抽象類必須使用abstract 關鍵字修飾。因為抽象類中含有抽象方法,所以不能用抽象類建立物件。抽象方法 只有宣告,沒有實現。如果乙個類繼承了乙個抽象類,他必須實現這個抽象類的全部抽象方法,否則,他依然是個抽象類。如下 private abstract c...