-
abstract class 和 interface 有什么區(qū)別
-
1.抽象類(lèi)
- 1.1抽象類(lèi)的格式
- 1.2抽象類(lèi)注意事項(xiàng)
-
2.接口
- 2.1接口的格式
- 2.2接口可以多繼承
- 2.3接口的實(shí)現(xiàn)(implements)
- 3.異同
-
1.抽象類(lèi)
abstract class 和 interface 有什么區(qū)別
1.抽象類(lèi)
抽象類(lèi):聲明方法的存在而不實(shí)現(xiàn)的類(lèi),如果一個(gè)類(lèi)中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,它只能被繼承,派生出子類(lèi),這樣的父類(lèi)就是抽象類(lèi)。
1.1抽象類(lèi)的格式
[public] abstract class 類(lèi)名 [extends父類(lèi)] [implements接口列表]
{
//屬性聲明及初始化;
//抽象方法的聲明;
//非抽象方法聲明及方法體;
}
1.2抽象類(lèi)注意事項(xiàng)
1.修飾抽象類(lèi)的修飾符有public和默認(rèn)修飾符兩種;
2.抽象類(lèi)中可以有抽象方法,也可以有非抽象的方法;
3.抽象方法是無(wú)方法體的方法。
4.定義抽象類(lèi)時(shí),要在關(guān)鍵字class的前面添加abstract。
5.抽象類(lèi)不能被實(shí)例化;
6.其包含的抽象方法必須在其子類(lèi)中被實(shí)現(xiàn),否則該子類(lèi)只能聲明為abstract;
7.抽象方法不能為static;
8.在下列情況下,一個(gè)類(lèi)必須聲明為抽象類(lèi):
- 當(dāng)一個(gè)類(lèi)的一個(gè)或多個(gè)方法是抽象方法時(shí);
- 當(dāng)類(lèi)是一個(gè)抽象類(lèi)的子類(lèi),并且沒(méi)有實(shí)現(xiàn)父類(lèi)的所有抽象方法,即只實(shí)現(xiàn)部分;
- 當(dāng)一個(gè)類(lèi)實(shí)現(xiàn)一個(gè)接口,并且不能為全部抽象方法都提供實(shí)現(xiàn)時(shí);
2.接口
由于類(lèi)的多繼承能夠?qū)е路椒ㄕ{(diào)用的沖突,所以Java中的類(lèi)只能單繼承。但是很多時(shí)候還是需要多繼承的,Java中的接口就可以實(shí)現(xiàn)多繼承,接口中不存在具體方法,不會(huì)引起方法調(diào)用的沖突。instanceof運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口
2.1接口的格式
[public] interface 接口名 [extends 父接口列表]{
// 屬性聲明,不寫(xiě)也是公共常量
[public] [static] [final] 屬性類(lèi)型屬性名 = 常量值 ;
// 方法聲明
[public] [abstract] 返回值類(lèi)型方法名 ( 參數(shù)列表 ) ;
}
1.接口中只包含常量和抽象方法,而沒(méi)有變量和方法的實(shí)現(xiàn),接口對(duì)類(lèi)來(lái)說(shuō)是一套規(guī)范,是一套行為協(xié)議。
2.接口不是一個(gè)類(lèi),不能實(shí)例化。
3.接口規(guī)定了類(lèi)的共同行為。
4.在Java中,接口的聲明采用interface關(guān)鍵字,接口不是一個(gè)類(lèi),沒(méi)有構(gòu)造方法,不能被實(shí)例化。
5.修飾接口的修飾符只有public和默認(rèn)修飾符兩種,不寫(xiě)也是public的
6.接口可以是多繼承,接口只能繼承接口,不能繼承類(lèi)。
7.屬性必須是常量(有初值),方法必須是抽象的(無(wú)方法體)。
2.2接口可以多繼承
//B,C也是接口
public interface A extends B,C {
}
2.3接口的實(shí)現(xiàn)(implements)
如果一個(gè)類(lèi)要實(shí)現(xiàn)一個(gè)接口,那么這個(gè)類(lèi)就必須實(shí)現(xiàn)接口中所有抽象方法。否則這個(gè)類(lèi)只能聲明為抽象類(lèi),多個(gè)無(wú)關(guān)的類(lèi)可以實(shí)現(xiàn)一個(gè)接口,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口,一個(gè)類(lèi)可以在繼承一個(gè)父類(lèi)的同時(shí),實(shí)現(xiàn)一個(gè)或多個(gè)接口。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-746306.html
class 類(lèi)名 [extends 父類(lèi)] [implements 接口列表]
{
覆蓋所有接口中定義的方法;
}
3.異同
相同:子類(lèi)必須實(shí)現(xiàn)它門(mén)的抽象方法,抽象類(lèi)與接口都不能創(chuàng)建自己的對(duì)象
不同:繼承使用extends,接口的實(shí)現(xiàn)用implements
抽象類(lèi)可以沒(méi)有抽象方法,接口中方法都是抽象的
抽象類(lèi)可以有自己構(gòu)造器及普通方法,接口中沒(méi)有構(gòu)造器
子類(lèi)只能繼承一個(gè)抽象類(lèi),但可以實(shí)現(xiàn)多個(gè)接口
抽象類(lèi)主要通過(guò)共享的屬性,接口主要提供共享的方法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-746306.html
到了這里,關(guān)于abstract class 和 interface 有什么區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!