正文
JAVA是隻支持單繼承的,但現實中存在很多多重繼承現象,比如“人是一種可愛的生物”,人可以從“可愛的生物”這個類繼承,“人是一種可以思考的動物”,人又從“會思考的動物”這個類繼承。這樣人可以分別從 “可愛的生物”、“會思考的動物” 這兩個類繼承,但由於JAVA只支持單繼承,因此人不可以同時繼承這兩個類。爲了實現這種現象,就出現了接口,接口可以實現多繼承。
什麼是接口?
- 接口是抽象方法和常量值的定義的集合
- 接口實際上是特殊的抽象類,它只包含常量和方法的定義,而沒有變量和方法的實現
接口舉例
package com.mlin;
interface SoulPer {
public static final int i = 0;//常量的定義
//方法的定義
public void call();
public void run();
}
接口的特性
- 接口可以多重實現
- 接口可以繼承其他接口,並添加屬性和方法
- 接口中聲明的屬性默認是
public static final
的,並且也只能是public static final
的 - 接口中定義的方法爲抽象方法,只能是
public
的。
在接口中定義常量,有時候是這樣寫int i = 0;
,那是因爲接口中聲明的屬性默認是public static final
的,public static final
可省略不寫。同理,接口中聲明的方法都是抽象的,所以可以省略abstract
關鍵字,寫成public void call();
注意:在接口裏面聲明的抽象方法默認是“public(公共的)”的,也只能是“public(公共的)”,之所以要這樣聲明是爲了修正C++裏面多重繼承的時候容易出現問題的地方,C++的多繼承容易出現問題,問題在於多繼承的多個父類之間如果他們有相同的成員變量的時候,這個引用起來會相當地麻煩,並且運行的時候會產生各種各樣的問題。JAVA爲了修正這個問題,把接口裏面所有的成員變量全都改成static final,成員變量是static類型,那麼這個成員變量就是屬於整個類裏面的,而不是專屬於某個對象。對於多重繼承來說,在一個子類對象裏面實際上包含有多個父類對象,而對於單繼承來說,子類對象裏面就只有一個父類對象。多繼承子類對象就有多個父類對象,而這些父類對象之間可能又會存在有重複的成員變量,這就非常容易出現問題,因此在JAVA裏面避免了這種問題的出現,採用了接口這種方式來實現多繼承。作爲接口來說,一個類可以從接口繼承,接口裏面的成員變量不專屬於某個對象,都是靜態的成員變量,是屬於整個類的,因此一個類去實現多個接口也是無所謂的,不會存在對象之間互相沖突的問題。實現多個接口,也就實現了多重繼承,而且又避免了多重繼承容易出現問題的地方,這就是用接口實現多重繼承的好處。
總結
接口和接口之間可以相互繼承,類和類之間可以相互繼承,類和接口之間,只能是類來實現接口
原創作者:凌小樣
作品鏈接:https://www.jianshu.com/p/a4820eefa075
【原創不易,轉載請註明出處,感謝理解】
一位愛生活,愛創作,愛分享,愛自己的90後女程序員一枚,記錄工作中的點點滴滴,一起學習,共同進步,期待能和優秀的您交上朋友