接口抽象類區(qū)別面試 接口和抽象類的主要區(qū)別?
接口和抽象類的主要區(qū)別?Java提供并支持抽象類和接口的創(chuàng)建。它們有一些共同點(diǎn),但區(qū)別在于接口中的所有方法都是抽象的。抽象類可以包含抽象方法和非抽象方法。類可以實(shí)現(xiàn)許多接口,但它只能繼承一個(gè)抽象類。如
接口和抽象類的主要區(qū)別?
Java提供并支持抽象類和接口的創(chuàng)建。
它們有一些共同點(diǎn),但區(qū)別在于接口中的所有方法都是抽象的。抽象類可以包含抽象方法和非抽象方法。類可以實(shí)現(xiàn)許多接口,但它只能繼承一個(gè)抽象類。如果一個(gè)類要實(shí)現(xiàn)一個(gè)接口,它必須實(shí)現(xiàn)接口聲明的所有方法。但是,一個(gè)類不能實(shí)現(xiàn)一個(gè)抽象類聲明的所有方法。當(dāng)然,在這種情況下,類也必須聲明為抽象的。抽象類可以實(shí)現(xiàn)接口而不提供接口方法實(shí)現(xiàn)。默認(rèn)情況下,java接口中聲明的變量是final。抽象類可以包含非最終變量。java接口中的成員函數(shù)默認(rèn)為public。抽象類成員函數(shù)可以是私有的、受保護(hù)的或公共的。接口是絕對(duì)抽象的,不能實(shí)例化。抽象類不能實(shí)例化,但如果它包含main方法,則可以調(diào)用它。您還可以參考jdk8中抽象類和接口之間的區(qū)別
1。Java接口和抽象類的相似性
](1)它們都不能實(shí)例化。
(2)接口的實(shí)現(xiàn)類或抽象類的子類只能在接口或抽象類中的方法實(shí)現(xiàn)后實(shí)例化。
2、Java接口與抽象類的區(qū)別
(1)接口只有定義,沒(méi)有方法實(shí)現(xiàn)。默認(rèn)方法體可以在Java1.8中定義,抽象類可以有定義和實(shí)現(xiàn),方法可以在抽象類中實(shí)現(xiàn)。
(2)實(shí)現(xiàn)接口的關(guān)鍵是實(shí)現(xiàn),繼承抽象類的關(guān)鍵是擴(kuò)展。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)抽象類。因此,可以通過(guò)使用接口間接實(shí)現(xiàn)多重繼承。
(3)接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而抽象類強(qiáng)調(diào)所有權(quán)。
(4)接口成員變量的默認(rèn)值是public static final,必須為其分配一個(gè)初始值,并且不能修改。它的所有成員方法都是公開(kāi)的和抽象的。abstract類中的成員變量默認(rèn)為default,可以在子類中重新定義或重新賦值;abstract方法由abstract修改,不能由private、static、synchronized和native修改,必須以分號(hào)結(jié)尾,不能用大括號(hào)括起來(lái)。
Java接口和抽象類的區(qū)別?
類似:接口和抽象類都不能實(shí)例化。它們位于繼承樹(shù)的頂部,用于由其他類實(shí)現(xiàn)和繼承。接口和抽象類都可以包含抽象方法,這些方法必須由實(shí)現(xiàn)接口或繼承抽象類的普通子類實(shí)現(xiàn)。區(qū)別:抽象類中可以存在非抽象方法;接口中的方法默認(rèn)都是抽象方法,非抽象方法不能存在。抽象類可以定義普通成員變量和靜態(tài)常量;接口只能定義靜態(tài)常量。抽象類可以包含構(gòu)造函數(shù)。抽象類中的構(gòu)造函數(shù)不用于創(chuàng)建對(duì)象,而是讓其子類調(diào)用這些構(gòu)造函數(shù)來(lái)完成抽象類的初始化操作。接口不能包含構(gòu)造函數(shù)。抽象類可以包含初始化代碼塊。接口不能包含初始化代碼塊。在實(shí)現(xiàn)抽象類的方法時(shí),如果該方法是抽象的,則子類必須重寫該抽象方法。如果方法不是抽象的,子類可以選擇繼承。要實(shí)現(xiàn)接口,必須實(shí)現(xiàn)接口中的所有方法。一個(gè)類最多只能有一個(gè)直接父類,包括抽象類;但一個(gè)類可以直接實(shí)現(xiàn)多個(gè)接口,這可以彌補(bǔ)Java單一繼承的不足。