官术网_书友最值得收藏!

4.3 接口的繼承

接口同樣可以被繼承,而且支持多重繼承。下面的代碼分別定義I1和I2兩個接口。

(I1.java文件)

    package com.caohuayu.javademo;
public interface I1 { void m1(); }

(I2.java文件)

    package com.caohuayu.javademo;
public interface I2 { void m1(); void m2(); }

在I1接口中定義m1()方法,而在I2接口中定義m1()和m2()兩個方法。請注意,m1()方法同時定義在I1和I2接口中。

此時,如果I2接口是I1接口的擴展,可以將I2接口定義為繼承I1接口。下面就是修改后的代碼(I2.javaI文件)。

    package com.caohuayu.javademo;
    public interface I2 extends I1 {
        void m2();
    }

接下來,使用C1類實現I1接口,如下面的代碼(C1.java文件)所示。

    package com.caohuayu.javademo;
public class C1 implements I1{ public void m1() { System.out.println("I1.m1() method is working"); } }

下面使用C2類實現I2接口。現在的問題是,如何處理m1()方法的實現。分三種情況來討論。

□ 如果I1.m1()和I2.m1()方法的實現完全一樣,則可以讓C2類繼承自C1類,這樣就不需要重寫m1()方法,只需要在C2類中實現m2()方法就可以了。通常,這是最理想的情況。

□ 如果I1.m1()和I2.m1()方法只是名稱一致,實現完全不同,可以讓C2類直接實現I2接口,這樣,C2類的定義與C1類無關。

□ 如果C2類需要同時使用I1.m1()和I2.m1()方法,則可以讓C2類繼承自C1類,然后通過不同的方法名分別實現I1.m1()和I2.m1()方法。因為在Java中無法處理不同接口中的同名方法,所以這只能是權宜之計。

下面的代碼(C2.java文件)使用第三種情況來實現C2類。

下面的代碼演示C2類的使用。

    public static void main(String[] args) {
        C2 c = new C2();
       c.m1();
       c.m2();
       c.m1_I1();
    }

代碼執行結果如圖4-1所示。

此外,與類的繼承不同,一個類可以同時實現多個接口,如下面的代碼所示。

圖4-1 接口的繼承

    public class C1 implements I1, Cloneable {
        //
        public void m1() {}
        //
        public Object clone() {}
    }

當一個類實現多個接口時,就需要實現這些接口中的所有成員,如果出現同名成員,可以參考前面的內容,并按照實際需要進行處理。

主站蜘蛛池模板: 济源市| 仁怀市| 忻州市| 潼关县| 汉川市| 临洮县| 邵武市| 新和县| 惠安县| 南安市| 霍城县| 句容市| 朝阳县| 凤凰县| 通渭县| 胶南市| 密山市| 徐水县| 祁门县| 定州市| 黄陵县| 东乌珠穆沁旗| 夹江县| 安达市| 寿阳县| 时尚| 闸北区| 塘沽区| 凤凰县| 柳林县| 炉霍县| 石柱| 河南省| 永昌县| 观塘区| 太谷县| 松原市| 湘潭县| 无为县| 安多县| 宿迁市|