java學習之接口


什么是接口?

  • 一個Java 接口(interface)是一些方法特征的集合,這些方法特征來自於具體方法,這些方法符合它們一般來自於一些在系統中不斷出現的方法。一個接口只有方法的特征,而沒有方法的實現,因此這些方法在不同的地方被實現時,可以具有完全不同的行為。在Java語言中,Java接口還可以定義public的變量。
  • 接口把方法的特征和方法的實現分割開來。這種分割,體現在接口常常代表一個角色(role),它包裝與該角色相關的操作和屬性,而實現這個接口的類便扮演這個角色的演員()。一個角色(接口)可以由不同的演員()來演,而不同的演員()之間除了扮演一個共同的角色(接口)之外,並不要求有任何其他的共同之處。

注意:

  • 在人們講到“接口”時,這個詞往往有兩種不同的含義:

    • 第一種是指Java接口,這是一種Java語言中存在的結構,有特定的語法和結構。
    • 第二種僅僅是指一個類所具有的方法的特征集合,是一種邏輯上的抽象。
  • Java的接口可以有public、靜態的(static)和final的屬性。

接口的用法

  • 定義與實現
public interface Test{
   public static final int num; //成員常量具有固定的修飾符:public static final
   public abstract void method; //成員函數具有固定的修飾符:public abstract 
}

public class Testimpl implements Test{
// 實現接口中的所有方法
    .....
}

接口的特性

  • 接口不是類,尤其不用使用new運算符實例一個接口。
  • 不能構造接口的對象,卻能聲明接口的變量。(出現在回調設計模式中,體現了Java的多態特性)
/*
*功能:到達指定的時間發出通告
*/
public interface ActionListener{
    void actionPerformed(ActionEvent event);
}

class TimePrinter implements ActionListener{
     //此處ActionEvent參數提供了事件的相關信息
     public void actionPerformed(ActionEvent event){
     	Date now = new Data();
     	System.out.println("At the tone, the time is" + now);
     	Toolkit.getDefaultToolkit().beep();
     }
}
//然后構造這個類的一個對象,並將它傳遞給Timer構造器。
ActionListener listener = new TimePrinter();
Timer t = new Timer(10000, listener);
  • 接口中不能包含實例域或靜態方法。
  • 接口與接口之間可以是繼承關系,而且可以實現多繼承。
public interface Moveable{
	void move(double x, double y);
}

public interface Powered extends Moveable{
	double milesPerGallon();
}

注意點

  • 對於接口中的固定修飾符,可以省略。
  • 一個類實現多個接口時,接口與接口之間要用逗號隔開。
  • 接口的變量必須引用實現了接口的類對象。

對於自己在學習接口時所存在的疑惑

接口為何不能用繼承代替呢?

回答:

  1. Java中不支持多繼承,也就是不能存在一個子類繼承多個父類的情況,當然你會問這是為什么呢.因為這會造成子類中某些方法或者變量的不確定性。
  2. 為了彌補①中采用單繼承所帶來的不足,Java出現了接口這個概念,接口可以很好的避免這個問題的出現。
  3. Java中通過多實現接口的方式去解決類之間無法多繼承的問題。

參考書籍

  • Java核心技術 卷一
  • Java與模式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM