在看API文檔時,突然發現一個接口可以是其他接口的子接口,這說明接口之間會存在繼承的關系。查找了相關的資料,做一個總結。
是繼承還是實現
首先要搞清楚接口之間的關系使用的關鍵字是extends還是implement。網友有如下回答:
一個類只能extends一個父類,但可以implements多個接口。java通過使用接口的概念來取代C++中多繼承。與此同時,一個接口則可以同時extends多個接口,卻不能implements任何接口。因而,Java中的接口是支持多繼承的。
自己動手驗證了一下:
首先在eclipse中創建interface時,彈出選項窗口中會有一個選項:
可以看到eclipse中也明確提示可以使用extends關鍵字繼承上層接口。
再看測試代碼清單:
Interface1:
- public interface Interface1 {
- public void method1();
- }
Interface2:
看到接口之間的關系使用implements關鍵字時會報錯,錯誤提示信息如下:
- Syntax error on token "implements", extends expected
eclipse明確指出,接口之間是繼承關系,而非實現關系。
修改為extends時代碼正確:
- public interface Interface2 extends Interface1{
- public int a = 1;
- public void method2();
- }
前面網友又提到java接口是可以支持多繼承的。做了一下實驗:
代碼清單:
- //interface3
- <pre name="code" class="java">public interface Interface3 {
- public void method3();
- }
//interface4
- <pre name="code" class="java">public interface Interface4 extends Interface1, Interface3 {
- public void method4();
- }
實現類A:
- public class A implements Interface4 {
- public static void main(String[] args) {
- }
- @Override
- public void method1() {
- // TODO Auto-generated method stub
- System.out.println("method1");
- }
- @Override
- public void method3() {
- // TODO Auto-generated method stub
- System.out.println("method2");
- }
- @Override
- public void method4() {
- // TODO Auto-generated method stub
- System.out.println("method3");
- }
- }
Main主類:
- public class Main {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- A a = new A();
- a.method1();
- a.method3();
- a.method4();
- }
- }
輸出結果:
- method1
- method2
- method3
說明java接口的繼承是多繼承的機制。