關於類、抽象類和接口的繼承關係spa
Java類的繼承是單繼承的,就是一個類只能繼承一個類,可是能夠經過接口來實現多繼承,一個類能夠實現多個接口。經過這種方式,Java類就能夠實現多繼承的關係。可是在繼承類和實現接口的時候,存在多方法的實現,下面就是介紹關於多繼承的方法實現問題。設計
1、類和抽象類繼承
當實現類Impl繼承一個抽象類Abstract,該實現類Impl能夠不用實現抽象類Abstract中的全部方法,可是必須實現抽象類中的全部抽象方法。接口
2、類和接口get
當實現類Impl直接實現接口Interface,那麼該實現類Impl必須是想接口Interface裏面的全部接口方法。ast
3、抽象類和接口權限
當抽象類Abstract實現接口Interface,抽象類能夠實現接口中的部分接口方法,也能夠徹底不實現任何接口方法。方法
理解:由於抽象類的功能相似接口,都是給某種行爲或者流程提供統一的抽象的規範,二者的目的都不是去具體實現具體操做,具體的操做須要不一樣實現類去實現。im
4、實現類繼承首相類而後實現接口總結
上面都是隻設計二者之間關係的狀況,當涉及三者之間關係的時候,狀況稍微複雜,可是當你理解實現類、抽象類和接口的存在的目的和意義也就很容易理解
實現類Impl extends 抽象類Abstract implements 接口Interface(注:下面全部狀況中抽象類Abstract都不用顯式實現接口Interface:即不須要在抽象類Abstract中寫Abstract implements Interface,只要方法是實現便可<即:方法的訪問權限,修飾詞,返回參數,參數列表同樣>)
一、 若是抽象類Abstract實現了Interface中的部分方法,那麼實現類Impl須要實現抽象類Abstract沒有實現Interface中的接口。
例:Interface有三個方法
public void getUp();
public void washFace();
public void eatBreakfast();
Abstract只實現了Interface中的一個方法getUp(),那麼Impl就須要實現剩下的兩個方法washFace()和eatBreakfast()
二、 若是抽象類Abstract沒有實現Interface中的任何方法(固然這種狀況在工做中不多遇到,這樣Abstract就失去了存在的意義),那麼Impl就必須實現接口中的全部方法。
三、 若是抽象類Abstract實現Interface中的全部方法,那麼實現類Impl就能夠選擇性的實現接口Interface中須要的方法
5、實體類繼承實體類而後實現接口
實體類AImpl extends 實體類BImpl implements 接口Interface
狀況和上面相似(這只是實體類,抽象類和接口關係的一種變化形式)
說明:BImpl不用顯式實現接口Interface,只要方法是實現接口Interface的方法便可
總結:抽象類和接口的功能是給類似行爲或者功能提供統一規範,不用具體實現某種操做,實現類是實現具體行爲和功能的真正載體。實體類不管是繼承仍是實現接口,或者是多重繼承,只要上層沒有被實現的接口或者抽象方法都必須被實現。