抽象类与接口 day-11.2
通??梢哉f(shuō)四邊形具有4條邊,或者更具體點(diǎn),平行四邊形是具有對(duì)邊平行且相等特性的特殊四邊形,等腰三角形是其中兩邊相等的三角形,這些描述都是合乎情理的,但是對(duì)于圖形對(duì)象卻不能使用具體的語(yǔ)言進(jìn)行描述,他有幾條邊,究竟是什么圖像,沒(méi)有人能說(shuō)清楚,這種類在java中被定義為抽象類。
一:抽象類
在解決實(shí)際問(wèn)題時(shí),一般將父類定義為抽象類,需要使用這個(gè)父類進(jìn)行繼承與多態(tài)處理。回想繼承與多態(tài)的原理,繼承樹(shù)中越是在上邊的類越抽象,如鴿子類繼承鳥(niǎo)類,鳥(niǎo)類繼承動(dòng)物類等。在多態(tài)機(jī)制中,并不需要將父類初始化對(duì)象,我們需要的只是子類對(duì)象,所以在java中設(shè)置抽象類不可以實(shí)例化對(duì)象,因?yàn)閳D形類不能抽象出任何一種具體圖形,但他們的子類可以。
抽象類的語(yǔ)法:
public abstract class Test{
????????? abstract void testAbstract();//定義抽象方法
}
其中,abstract是定義抽象類的關(guān)鍵字。
使用abstract關(guān)鍵字定義的類稱為抽象類,而使用這個(gè)關(guān)鍵字定義的方法稱為抽象方法;抽象方法沒(méi)有方法體,這個(gè)方法本身沒(méi)有任何意義,除非他被重寫(xiě),而承載這個(gè)抽象方法的抽象類必須被繼承,實(shí)際上抽象類除了被繼承之外沒(méi)有任何意義。
反過(guò)來(lái)講,如果聲明一個(gè)抽象的方法,就必須將繼承這個(gè)抽象方法的類定義為抽象類,不可能在非抽象類中獲得抽象方法。換句話說(shuō),只要類中有一個(gè)抽象方法,此類就被標(biāo)記為抽象類。
抽象類被繼承后需要實(shí)現(xiàn)其中所有的抽象方法,也就是保證相同的方法名稱,參數(shù)列表和相同返回值類型創(chuàng)建出非抽象方法,當(dāng)然也可以是抽象方法。
繼承抽象類的所有子類需要將抽象類中的抽象方法進(jìn)行覆蓋。這樣在多態(tài)機(jī)制中,就可以將父類修改為抽象類,將方法修改成抽象方法,然后每個(gè)子類都重寫(xiě)這個(gè)方法類處理。但這又會(huì)出現(xiàn)我們剛探討的多態(tài)是討論的問(wèn)題,程序中灰有太多冗余的代碼,同時(shí)這樣的父類局限性很大,也許某個(gè)不需要父類方法的子類也不得不重寫(xiě)方法。如果將方法放置在另外一個(gè)類中,這樣讓那些需要方法的類繼承該類,而不需要方法的類繼承圖形類,但所有的子類都需要圖形類,因?yàn)檫@些類是從圖形類中被導(dǎo)出的,同時(shí)某些類還需要方法,但是在java中規(guī)定,類不能同時(shí)繼承多個(gè)父類,面臨這種問(wèn)題,接口的概念就出現(xiàn)了。
二:接口
1.接口簡(jiǎn)介
接口是抽象類的延伸,可以將它看做是純粹的抽象類,接口中的所有方法,都沒(méi)有方法體。對(duì)于上面的問(wèn)題,可以將方法封裝到一個(gè)接口中,使需要方法的類實(shí)現(xiàn)這個(gè)接口,同時(shí)也繼承圖形類,這就是接口存在的必要性。
接口使用interface關(guān)鍵字進(jìn)行定義,其語(yǔ)法如下:
public interface drawTest{
????? void draw();//接口內(nèi)的方法,省略abstract關(guān)鍵字
}
*public :接口可以像類一樣被權(quán)限修飾符修飾,但public關(guān)鍵字僅限用與接口在與其同名的文件中被定義。
*interface :定義接口關(guān)鍵字。
*drawTest:接口名稱。
一個(gè)類實(shí)現(xiàn)一個(gè)接口可以使用implements關(guān)鍵字,代碼如下:
public class S extends Y implements drawTest{
········
}
注意:在接口中定義的方法必須被定義為public或abstract形式,其他修飾符權(quán)限不被java編譯器認(rèn)可,即使不將該方法聲明我public形式,他也是public。
說(shuō)明:在接口中定義的任何字段都自動(dòng)是static 和final的。
2、接口與繼承
我們知道在java中不允許多重繼承,但使用接口就可以實(shí)現(xiàn)多重繼承,因?yàn)橐粋€(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,這樣可以將所有需要繼承的接口放置在implements關(guān)鍵字后并使用逗號(hào)隔開(kāi),但這可能會(huì)在一個(gè)類中產(chǎn)生龐大的代碼量,因?yàn)槔^承一個(gè)接口時(shí)需要實(shí)現(xiàn)接口中所有的方法。
多重繼承的語(yǔ)法如下:
class 類名 implements 接口1,接口2,接口3·····,接口n
在定義一個(gè)接口時(shí)可使該接口繼承另外一個(gè)接口:
interface f1{
}
interface f2 extends f1{
}
轉(zhuǎn)載于:https://blog.51cto.com/12170526/1868681
總結(jié)
以上是生活随笔為你收集整理的抽象类与接口 day-11.2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux自定义和使用 shell 环境
- 下一篇: POJ 1671 第二类斯特林数