接口的定義:
接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型金拒,是比抽象類更為抽象的”類”。
接口只描述所應該具備的方法套腹,并沒有具體實現(xiàn)绪抛,具體的實現(xiàn)由接口的實現(xiàn)類(相當于接口的子類)來完成。這樣將功能的定義與實現(xiàn)分離电禀,優(yōu)化了程序設計幢码。
請記住:一切事物均有功能尖飞,即一切事物均有接口症副。
與定義類的class不同,接口定義時需要使用interface關鍵字政基。
定義接口所在的仍為.java文件贞铣,雖然聲明時使用的為interface關鍵字的編譯后仍然會產(chǎn)生.class文件。這點可以讓我們將接口看做是一種只包含了功能聲明的特殊類沮明。
使用interface代替了原來的class辕坝,其他步驟與定義類相同:
接口中的方法均為公共訪問的抽象方法
接口中無法定義普通的成員變量
在類實現(xiàn)接口后,該類就會將接口中的抽象方法繼承過來荐健,此時該類需要重寫該抽象方法酱畅,完成具體的邏輯.
接口中定義功能琳袄,當需要具有該功能時,可以讓類實現(xiàn)該接口纺酸,只聲明了應該具備該方法窖逗,是功能的聲明。
在具體實現(xiàn)類中重寫方法餐蔬,實現(xiàn)功能滑负,是方法的具體實現(xiàn)。
于是用含,通過以上兩個動作將功能的聲明與實現(xiàn)便分開了。(此時請重新思考:類是現(xiàn)實事物的描述帮匾,接口是功能的集合啄骇。)
特點
1.接口中可以定義變量,但是變量必須有固定的修飾符修飾瘟斜,public static final 所以接口中的變量也稱之為常量缸夹,其值不能改變
2.接口中可以定義方法,方法也有固定的修飾符螺句,public abstract
3.接口不可以創(chuàng)建對象虽惭。
4.子類必須覆蓋掉接口中所有的抽象方法后,子類才可以實例化蛇尚。否則子類是一個抽象類
繼承的定義
Java中是允許繼承的,就是當A類繼承B類時,那么A類就會擁有B類所有可以繼承過來的內(nèi)容.那么A類就叫做子類,B類就是父類
?注意:
1.Java中只允許單繼承,也就是一個類只能有一個父類;但是一個父類卻可以擁有多個子類
2.繼承要合理
3.Java所有的類默認繼承自Object,是所有類的根類,每個類都直接或者間接繼承他
子類可以通過接口間接的訪問父類中的私有屬性
方法重寫:指的是子類從父類繼承過來的方法,如果不滿足子類需求時,子類可以重寫父類方法實現(xiàn)
重寫分為:
完全重寫:不保留父類方法的實現(xiàn)
不完全重寫:保留父類方法實現(xiàn),但是還會添加自己對象方法的實現(xiàn)
抽象類的應用場景:當一個父類定義方法還對方法進行的實現(xiàn),但是發(fā)現(xiàn)子類只要繼承這個類,就會對父類的方法進行重寫,那么父類對這個方法的實現(xiàn)就沒有意義.此時就可以把這些方法定義到抽象類中,抽象類中方法都是抽象方法,因為只有聲明而沒有方法具體實現(xiàn).
abstract 抽象類的關鍵字
抽象類只能作為父類,因為抽象類不能實例化.
原因是它里面的方法是抽象方法,沒有具體實現(xiàn)
繼承自抽象類的子類,必須實現(xiàn)抽象類中抽象方法
接口和抽象類的相同點與區(qū)別
相同點:
1.都位于繼承的頂端,用于被其他類實現(xiàn)或繼承;
2.都不能直接實例化對象;
3.都包含抽象方法,其子類都必須覆寫這些抽象方法;
區(qū)別:
1.抽象類為部分方法提供實現(xiàn),避免子類重復實現(xiàn)這些方法,提高代碼重用性;接口只能包含抽象方法;
2.一個類只能繼承一個直接父類(可能是抽象類),卻可以實現(xiàn)多個接口;(接口彌補了Java的單繼承)
3.抽象類是這個事物中應該具備的你內(nèi)容, 繼承體系是一種is..a關系
4.接口是這個事物中的額外內(nèi)容,繼承體系是一種like..a關系
二者的選用:
優(yōu)先選用接口,盡量少用抽象類;
需要定義子類的行為,又要為子類提供共性功能時才選用抽象類