Java中接口和抽象類的區(qū)別與相同之處
1. 抽象類:
(1).概念:抽象類是對(duì)一種事物的抽象,即對(duì)類抽。.抽象類是對(duì)整個(gè)類整體進(jìn)行抽象,包括屬性、行為。Java抽象類和Java接口一樣,都用來(lái)聲明一個(gè)新的類型。并且作為一個(gè)類型的等級(jí)結(jié)構(gòu)的起點(diǎn)。
(2).格式:
public abstract class abstractDemo{
/**屬性*/
private String name;
/**方法*/
public abstract void fun();
}
(3).說(shuō)明:
A:抽象類中不一定有抽象方法,但是有抽象方法的類一定要定義為抽象類。
B:在Java語(yǔ)言中,類有兩種,一種是具體類,另一種是抽象類。
具體類可以實(shí)例化,抽象類不可以實(shí)例化。
C:對(duì)于抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實(shí)現(xiàn),子類可以不進(jìn)行變更;
D:抽象方法只有聲明,沒有具體的實(shí)現(xiàn)。抽象類是為了繼承而存在的,如果你定義了一個(gè)抽象類,卻不去繼承它,就等于白白的創(chuàng)建了這個(gè)類。
E:對(duì)于一個(gè)父類,如果它的一個(gè)方法在父類中實(shí)現(xiàn)沒有任何意義,必須根據(jù)子類的實(shí)際需求來(lái)進(jìn)行不同的實(shí)現(xiàn),那么就可以將這個(gè)方法聲明為abstract方法,此時(shí)這個(gè)類也就成為了abstract抽象類。
2. 接口:
(1).概念:接口是對(duì)行為的抽象。接口是對(duì)類局部(行為)進(jìn)行抽象。
(2).格式:
public interface test {
/** 抽象方法 */
public abstract void fun();
}
(3).說(shuō)明:
接口中可以含有變量和方法,但是,接口中的變量會(huì)被隱式地指定為public static final。而方法會(huì)被隱式地指定為public abstract方法且只能是public abstract方法。
3. 接口和抽象類的區(qū)別與聯(lián)系:
(1).抽象類是對(duì)一種事物的抽象,即對(duì)類抽象,而接口是對(duì)行為的抽象。
(2).抽象類是對(duì)整個(gè)類整體進(jìn)行抽象,包括屬性、行為,但是接口卻是對(duì)類局部(行為)進(jìn)行抽象。
(3). 繼承是一個(gè) “是不是”的關(guān)系,而 接口 實(shí)現(xiàn)則是 “有沒有”的關(guān)系。如果一個(gè)類繼承了某個(gè)抽象類,則子類必定是抽象類的種類,而接口實(shí)現(xiàn)則是有沒有、具備不具備的關(guān)系。
(4).接口只給出方法的聲明,不給出方法的實(shí)現(xiàn)。抽象類中可以有抽象方法的一般方法。如果是抽象方法的話,只有方法的聲明。如果是一般方法的話,既有方法的聲明,也有方法的實(shí)現(xiàn)。
4. 使用接口的原因:
(1).沒有接口,可插入性就沒有保證。因?yàn)镴ava是單繼承的。
(2).在一個(gè)類等級(jí)結(jié)構(gòu)中的任何一個(gè)類都可以實(shí)現(xiàn)一個(gè)接口,如果這個(gè)類實(shí)現(xiàn)了這個(gè)接口那么將會(huì)影響到此類的所有子類,但是不會(huì)影響到此類的所有父類。
(3).一個(gè)類最多有一個(gè)父類,但是可以同時(shí)實(shí)現(xiàn)幾個(gè)接口。
5. 問(wèn)題:
在《JAVA編程思想》一書中,將抽象類定義為“包含抽象方法的類”,但是后面發(fā)現(xiàn)如果一個(gè)類不包含抽象方法,只是用abstract修飾的話也是抽象類。也就是說(shuō)抽象類不一定必須含有抽象方法。因?yàn)槿绻粋€(gè)抽象類不包含任何抽象方法,為何還要設(shè)計(jì)為抽象類?
個(gè)人理解:
抽象類目的是用來(lái)繼承的,在定義上,可以沒有抽象方法,只是用abstract修飾是沒有語(yǔ)法錯(cuò)誤的,但是沒有哦實(shí)際意義。抽象類中的抽象方法是讓子類繼承抽象類,來(lái)實(shí)現(xiàn)抽象類中的抽象方法,根據(jù)子類的需求分別來(lái)實(shí)現(xiàn)不同的功能。
相關(guān)文章
response.setContentType()參數(shù)以及作用詳解
這篇文章主要介紹了response.setContentType()參數(shù)以及作用詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Java基礎(chǔ)之JDK1.8新特性lambda表達(dá)式詳解
函數(shù)式接口有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口,函數(shù)式接口可以被隱式轉(zhuǎn)換為lambda表達(dá)式,這篇文章主要介紹了Java基礎(chǔ)之lambda表達(dá)式(JDK1.8新特性),需要的朋友可以參考下2023-08-08
java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例
這篇文章主要介紹了java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例,需要的朋友可以參考下2014-02-02
JAVA實(shí)戰(zhàn)項(xiàng)目實(shí)現(xiàn)客戶選購(gòu)系統(tǒng)詳細(xì)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶選購(gòu)系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-10-10
java用重定向方法從文件中讀入或?qū)懭霐?shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了用重定向方法從文件中讀入或?qū)懭霐?shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03

