- Java與Android移動應用開發:技術、方法與實踐
- 曹化宇
- 639字
- 2019-12-06 15:39:14
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() {} }
當一個類實現多個接口時,就需要實現這些接口中的所有成員,如果出現同名成員,可以參考前面的內容,并按照實際需要進行處理。
推薦閱讀
- Practical Data Analysis Cookbook
- Vue.js 3.x從入門到精通(視頻教學版)
- Mastering Swift 2
- Apache Mahout Clustering Designs
- Apache Spark 2.x for Java Developers
- jQuery Mobile移動應用開發實戰(第3版)
- Protocol-Oriented Programming with Swift
- IBM Cognos Business Intelligence 10.1 Dashboarding cookbook
- Windows Phone 8 Game Development
- Building Slack Bots
- Python機器學習與量化投資
- 面向對象程序設計及C++(第3版)
- Yii2 By Example
- SQL Server實例教程(2008版)
- Java EE 7 Development with WildFly