
抽象方法和接口的區(qū)別,抽象與具體的例子

大家好,今天小編來為大家解答抽象方法和接口的區(qū)別這個(gè)問題,抽象與具體的例子很多人還不知道,現(xiàn)在讓我們一起來看看吧!Java接口和抽象類的區(qū)別一、Java接口和抽象類的相...
大家好,今天小編來為大家解答抽象方法和接口的區(qū)別這個(gè)問題,抽象與具體的例子很多人還不知道,現(xiàn)在讓我們一起來看看吧!
Java接口和抽象類的區(qū)別
一、Java接口和抽象類的相同點(diǎn)
(1)都不能被實(shí)例化。
(2)接口的實(shí)現(xiàn)類或抽象類的子類都只有實(shí)現(xiàn)了接口或抽象類中的方法后才能實(shí)例化。
二、Java接口和抽象類的不同點(diǎn)
(1)接口只有定義,不能有方法的實(shí)現(xiàn),java1.8中可以定義default方法體,而抽象類可以有定義與實(shí)現(xiàn),方法可在抽象類中實(shí)現(xiàn)。
(2)實(shí)現(xiàn)接口的關(guān)鍵字為implements,繼承抽象類的關(guān)鍵字為extends。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)抽象類。所以,使用接口可以間接地實(shí)現(xiàn)多重繼承。
(3)接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而抽象類強(qiáng)調(diào)所屬關(guān)系。
(4)接口成員變量默認(rèn)為publicstaticfinal,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認(rèn)default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結(jié)尾,不帶花括號。
抽象類和接口的區(qū)別與聯(lián)系
抽象類和接口是面向?qū)ο缶幊讨械膬蓚€(gè)重要概念,它們有相似之處,但也存在一些區(qū)別。
區(qū)別:
實(shí)現(xiàn)方式:抽象類是一個(gè)普通類,可以包含普通的方法和字段,也可以包含抽象方法(沒有具體實(shí)現(xiàn))。接口是一組方法的集合,沒有實(shí)現(xiàn)部分,只有方法定義。
繼承關(guān)系:一個(gè)類只能繼承單個(gè)抽象類,而可以實(shí)現(xiàn)多個(gè)接口。這意味著一個(gè)類可以在繼承一個(gè)抽象類的同時(shí),實(shí)現(xiàn)多個(gè)接口。
構(gòu)造函數(shù):抽象類可以有構(gòu)造函數(shù),而接口不能擁有構(gòu)造函數(shù)。由于接口沒有實(shí)現(xiàn)的部分,它無法創(chuàng)建實(shí)例。
默認(rèn)實(shí)現(xiàn):抽象類可以為子類提供默認(rèn)的實(shí)現(xiàn),而接口中的方法沒有默認(rèn)實(shí)現(xiàn),實(shí)現(xiàn)類需要自行實(shí)現(xiàn)接口方法。
聯(lián)系:
都可用于定義類的行為和規(guī)范的組件。
都可以被子類或?qū)崿F(xiàn)類繼承或?qū)崿F(xiàn),并重寫其方法。
都可以用于實(shí)現(xiàn)多態(tài)性,即允許多個(gè)不同類的實(shí)例被視為同一種類型的對象。
使用選擇:
使用抽象類當(dāng)一個(gè)類要被子類繼承,并且提供通用的實(shí)現(xiàn)代碼時(shí)。
使用接口當(dāng)一個(gè)類要實(shí)現(xiàn)特定的功能而不關(guān)心具體實(shí)現(xiàn)細(xì)節(jié),并且可能需要一個(gè)類實(shí)現(xiàn)多個(gè)接口。接口主要用于定義類之間的契約,以確保實(shí)現(xiàn)類滿足特定的行為要求。
為什么不允許接口中只有一個(gè)抽象方法
正確的接口中方法都為抽象方法。
抽象類和接口的區(qū)別:抽象類由abstract關(guān)鍵字來修飾,接口由interface關(guān)鍵字來修飾。抽象類中除了有抽象方法外,也可以有數(shù)據(jù)成員和非抽象方法;而接口中所有的方法必須都是抽象的,接口中也可以定義數(shù)據(jù)成員,但必須是常量。
抽象類和接口有什么區(qū)別
區(qū)別如下:
1、抽象類和接口都不能直接實(shí)例化,如果要實(shí)例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。
2、抽象類要被子類繼承,接口要被類實(shí)現(xiàn)。
3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實(shí)現(xiàn)。
4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。
5、抽象類里的抽象方法必須全部被子類所實(shí)現(xiàn),如果子類不能全部實(shí)現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個(gè)實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法,那么該類也只能為抽象類。
6、抽象方法只能申明,不能實(shí)現(xiàn),接口是設(shè)計(jì)的結(jié)果,抽象類是重構(gòu)的結(jié)果。
7、抽象類里可以沒有抽象方法。
8、如果一個(gè)類里有抽象方法,那么這個(gè)類只能是抽象類。
9、抽象方法要被實(shí)現(xiàn),所以不能是靜態(tài)的,也不能是私有的。
10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。
抽象類和接口的區(qū)別
1.接口是行為的抽象,是一種行為的規(guī)范,接口是likea的關(guān)系;抽象是對類的抽象,是一種模板設(shè)計(jì),抽象類是isa的關(guān)系。
2.接口沒有構(gòu)造方法,而抽象類有構(gòu)造方法,其方法一般給子類使用
3.接口只有定義,不能有方法的實(shí)現(xiàn),java1.8中可以定義default方法體,而抽象類可以有定義與實(shí)現(xiàn),方法可在抽象類中實(shí)現(xiàn)。
4.抽象體現(xiàn)出了繼承關(guān)系,繼承只能單繼承。接口提現(xiàn)出來了實(shí)現(xiàn)的關(guān)系,實(shí)現(xiàn)可以多實(shí)現(xiàn)。接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而抽象類強(qiáng)調(diào)所屬關(guān)系。
5.接口成員變量默認(rèn)為publicstaticfinal,必須賦初值,不能被修改;其所有的成員方法都是publicabstract的。
抽象類中成員變量默認(rèn)default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結(jié)尾,不帶花括號。
關(guān)于抽象方法和接口的區(qū)別的內(nèi)容到此結(jié)束,希望對大家有所幫助。
本文鏈接:http://www.wzyaohuidianqi.cn/ke/3297.html
