其實這是有原因的的,下面我們就來具體說說。
首先,
我們來說說為什么Java不支持多重繼承。先假設Java支持多重繼承,注意是假設,事實並不支持的。舉個例子,
類C繼承類B和類A,A、B都有一個返回值、方法名、參數都完全相同的而內部實現不同的方法,那么類C就不知道該繼承哪個類里的方法,從而出現問題。所以為了避免此類問題Java不支持多重繼承。
既然
Java不支持多重繼承,那我們遇到需要使用多重繼承來解決的問題,我們又該怎么辦呢?為此,Java提出了接口的思想,接口本質上也是一個類,只不過它所有的方法都是抽象的,也就是說所有的方法都只是做了聲明而沒有具體的實現內容。為了與普通的類做出區別, 這種特殊的類我們不稱為類,而命名為接口。類可以繼承多個接口,因為對於前面舉的例子,由於方法都是抽象沒有實現的,類繼承哪個接口的方法都無所謂了,都 只是個聲明而已。不過為了避免與Java不支持多重繼承混淆,
我們把類繼承接口不稱作繼承而稱作實現,也就是說一個類可以實現多個接口。同時當類實現接口 時,是要對接口聲明的抽象方法具體實現的,所以類實現接口的稱呼也顯得更加貼切。
同理,
接口也可以繼承接口的,而且一個接口可以繼承多個接口,因為方法都是抽象的,所以不會引起‘不知道該繼承哪個方法’的問題。
綜述,普通類和接口本質上是一樣的,原則是不能出現繼承方法混亂。