一.抽象類和接口區(qū)別:
抽象類由abstract關(guān)鍵字來(lái)修飾,接口由interface關(guān)鍵字來(lái)修飾。
抽象類中除了有抽象方法外,也可以有數(shù)據(jù)成員和非抽象方法;
而接口中所有的方法必須都是抽象的(public abstract類型),接口中也可以定義數(shù)據(jù)成員,但必須是常量(public static final)。
抽象類可以有構(gòu)造方法,接口不能有構(gòu)造方法
抽象類速度比接口速度要快,接口是稍微有點(diǎn)慢的,因?yàn)樗枰獣r(shí)間去尋找在類中實(shí)現(xiàn)的方法。
與正常Java類的區(qū)別除了你不能實(shí)例化抽象類之外,它和普通Java類沒(méi)有任何區(qū)別;接口是完全不同的類型
/*
參考資源http://blog.csdn.net/wei_zhi/article/details/52736350
https://www.cnblogs.com/jizuiku/p/7466609.html
*1.如果一個(gè)類中含有抽象方法(abstract),你還不定義為抽象類abstract,必然報(bào)錯(cuò)
*2.抽象方法中沒(méi)有方法體
*3.抽象類中可以不含有抽象方法
*4.抽象類無(wú)法直接進(jìn)行實(shí)例化操作,需要依靠子類采用向上轉(zhuǎn)型的方式處理 ->TestDemo
*5.抽象類中方法只含有public,protected,不能含有private,不寫默認(rèn)為public
*6如果抽象類中方法用的是protected,則子類可以重寫為public或protected;如果抽象類中方法用的是public,則子類可以重寫為public
*7.子類(如果不是抽象類)則必須覆寫抽象類之中的全部抽象方法(如果子類沒(méi)有實(shí)現(xiàn)父類的抽象方法,則必須將子類也定義為為abstract類。);
*8.抽象類可以有構(gòu)造函數(shù),子類必須也有構(gòu)造函數(shù)并且如果繼承有參數(shù)的構(gòu)造函數(shù)不用super則會(huì)報(bào)錯(cuò)
*9.抽象類可以用final聲明么?
不能,因?yàn)槌橄箢惐仨氂凶宇?,而final定義的類不能有子類;
*10.抽象類可以有成員變量,當(dāng)然public和protected,不能是private,final,而且可以是靜態(tài)static
*11.抽象類方法也可以是static
* */
/*
在Java中,一個(gè)抽象類只能繼承一個(gè)抽象類,但一個(gè)接口卻可以使用extends關(guān)鍵字同時(shí)繼承多個(gè)接口(但接口不能繼承抽象類)。
由此可見,從繼承關(guān)系來(lái)說(shuō)接口的限制比抽象類少:
(1)一個(gè)抽象類只能繼承一個(gè)抽象父類,而接口可以繼承多個(gè)接口;
(2)一個(gè)子類只能繼承一個(gè)抽象類,卻可以實(shí)現(xiàn)多個(gè)接口(在Java中,接口的主要功能是解決單繼承局限問(wèn)題)
*/