類與接口
抽象類和接口的對(duì)比?
抽象類是用來(lái)捕捉子類的通用特性的。接口是抽象方法的集合。
從設(shè)計(jì)層面來(lái)說(shuō),抽象類是對(duì)類的抽象,是一種模板設(shè)計(jì),接口是行為的抽象,是一種行為的規(guī)范。?
相同點(diǎn)
接口和抽象類都不能實(shí)例化?
都位于繼承的頂端,用于被其他實(shí)現(xiàn)或繼承?
都包含抽象方法,其子類都必須覆寫這些抽象方法?
不同點(diǎn)

備注:Java8中接口中引入默認(rèn)方法和靜態(tài)方法,以此來(lái)減少抽象類和接口之間 的差異。
現(xiàn)在,我們可以為接口提供默認(rèn)實(shí)現(xiàn)的方法了,并且不用強(qiáng)制子類來(lái)實(shí)現(xiàn)它。 接口和抽象類各有優(yōu)缺 點(diǎn),在接口和抽象類的選擇上,必須遵守這樣一個(gè)原則:
行為模型應(yīng)該總是通過(guò)接口而不是抽象類定義,所以通常是優(yōu)先選用接口,盡量少用抽象類。
選擇抽象類的時(shí)候通常是如下情況:需要定義子類的行為,又要為子類提供通用 的功能。
普通類和抽象類有哪些區(qū)別?
普通類不能包含抽象方法,抽象類可以包含抽象方法。?
抽象類不能直接實(shí)例化,普通類可以直接實(shí)例化。
抽象類能使用 final 修飾嗎?
不能,定義抽象類就是讓其他類繼承的,如果定義為 final 該類就不能被繼承, 這樣彼此就會(huì)產(chǎn)生矛 盾,所以 final 不能修飾抽象類
創(chuàng)建一個(gè)對(duì)象用什么關(guān)鍵字?對(duì)象實(shí)例與對(duì)象引用有何不同?
new關(guān)鍵字,new創(chuàng)建對(duì)象實(shí)例(對(duì)象實(shí)例在堆內(nèi)存中),對(duì)象引用指向?qū)ο髮?shí) 例(對(duì)象引用存放在棧 內(nèi)存中)。一個(gè)對(duì)象引用可以指向0個(gè)或1個(gè)對(duì)象(一根 繩子可以不系氣球,也可以系一個(gè)氣球);一個(gè) 對(duì)象可以有n個(gè)引用指向它(可以 用n條繩子系住一個(gè)氣球)