1.抽象類和接口的區(qū)別:
在Java中剪个,使用abstract關(guān)鍵字修飾的類稱之為抽象類秧骑。抽象類是不能被實(shí)例化的,通常需要寫(xiě)一個(gè)子類來(lái)繼承抽象類扣囊,同時(shí)實(shí)例化子類來(lái)獲得該類的對(duì)象乎折。抽象類通常用于表示一種抽象的概念。接口可以說(shuō)是一種特殊的抽象類侵歇,接口中只能定義常量和抽象方法笆檀。由于接口的特殊性,在定義時(shí)需要使用interface關(guān)鍵字盒至。接口中所有方法都是抽象方法酗洒,不允許普通方法和屬性的存在,接口中抽象方法的修飾符public abstract默認(rèn)存在枷遂,類可以使用implements關(guān)鍵字來(lái)實(shí)現(xiàn)一個(gè)接口樱衷。
1.abstract class在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系酒唉。但是矩桂,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface。
2.在abstract class中可以有自己的數(shù)據(jù)成員痪伦,也可以有非abstarct的成員方法侄榴,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的网沾,不過(guò)在interface中一般不定義數(shù)據(jù)成員)癞蚕,所有的成員方法都是abstract的。
3.abstract class和interface所反映出的設(shè)計(jì)理念不同辉哥。其實(shí)abstract class
表示的是"is-a"關(guān)系桦山,interface表示的是"like-a"關(guān)系。
4.實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法醋旦。抽象類中可以有非抽象方法恒水。接口中則不能有實(shí)現(xiàn)方法。
5.接口中定義的變量默認(rèn)是public static final型饲齐,且必須給其初值钉凌,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值捂人。
6.接口中的方法默認(rèn)都是public,abstract類型的御雕。
結(jié)論
abstract class和interface是Java語(yǔ)言中的兩種定義抽象類的方式矢沿,它們之間有很大的相似性。但是對(duì)于它們的選擇卻又往往反映出對(duì)于問(wèn)題領(lǐng)域中的概 念本質(zhì)的理解饮笛、對(duì)于設(shè)計(jì)意圖的反映是否正確咨察、合理论熙,因?yàn)樗鼈儽憩F(xiàn)了概念間的不同的關(guān)系(雖然都能夠?qū)崿F(xiàn)需求的功能)福青。
2.抽象方法和普通方法有什么區(qū)別?
普通方法必須要有方法體脓诡,抽象方法不能有方法體(大括號(hào)也沒(méi)有)无午;
抽象方法用abstract修飾,訪問(wèn)修飾符不能用private祝谚;抽象方法只能存在于抽象類/接口中宪迟。
3.使用抽象類的優(yōu)勢(shì)是什么?
抽象類可以將已經(jīng)實(shí)現(xiàn)的方法提供給其子類使用交惯,使代碼可以被復(fù)用次泽;
抽象類中的抽象方法在子類中重寫(xiě),保證了子類還具有自身的獨(dú)特性席爽;
通過(guò)抽象類指向其子類的對(duì)象意荤,可以實(shí)現(xiàn)多態(tài)。
4.抽象類和接口的相同點(diǎn)和不同點(diǎn)分別是什么只锻?
相同:都是抽取出來(lái)的抽象概念玖像,自身都不能實(shí)例化。
不同:①抽象類體現(xiàn)繼承關(guān)系齐饮,一個(gè)類只能單繼承捐寥;接口體現(xiàn)實(shí)現(xiàn)關(guān)系,一個(gè)類可以多實(shí)現(xiàn)祖驱;
②抽象類中可以定義非抽象方法握恳,供子類直接使用;
③接口的方法都是抽象方法捺僻,接口中的成員都有固定修飾符睡互。