歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java中的interface 接口

Java中的interface 接口

日期:2017/3/1 9:08:21   编辑:Linux編程

關於接口

接口描述了實現了它的類擁有什麼功能。因為Java是強類型的,所以有些操作必須用接口去約束和標記。接口作為類的能力的證明,它表明了實現了接口的類能做什麼。

類似與class,interface也是java中的一種引用類型。

接口中的成員

接口中的所有的成員,缺省情況下都是public的,也必須是public,無論是方法,還是字段。因為接口就是規定了API,如果實現的類不公開接口中的API,怎麼能叫API呢?

一般情況下,接口中可以 定義方法 和 字段。

接口中的字段,必須(默認)為 public static final 。在定義的接口中必須初始化,因為是final。它們將成為類中的靜態常量字段

接口中的方法,必須(默認)為 public abstract 。只需在接口中定義即可,不能實現(讓實現了接口的類去實現)。將成為類中的public 實例方法 , 實現了接口的類必須實現接口中定義的方法。

定義一個接口

interface InterfaceName [extends interface1,interface2]
{
void foo();

void bar();

//...紅色部分是 可選的

}

接口和類之間的implements關系

接口就是用來被實現implements 的 ,不然定義接口也就沒意義了。Java中的類只能繼承一個父類,但是可以實現多個接口。除了抽象類,普通類必須實現接口中定義的所有方法。

當一個類實現了某個接口後,接口可以看做是 是實現了接口的類 的 父類型。利用多態的特性,我們往往選擇面向接口編程,而不是面向具體的類,這樣可以讓程序員關注API而不是內部實現,並提供更大的靈活性。

public class Test
{

public static void main(String[] args)
{

Workable[] workers = {

new Teacher(),new Student()
};


fireWork(workers);

}

public static void fireWork(Workable[] workers)
{

for (int i = 0; i < workers.length; i++)
{
workers[i].doTask();
}

}

}

interface Workable
{
void doTask();
}

class Student implements Workable
{
@Override
public void doTask()
{
System.out.println("學生的工作是學習");
}
}

class Teacher implements Workable
{
@Override
public void doTask()
{
System.out.println("老師的工作是教書");
}
}

每一個Teacher 、Student對象都是Workable對象,可以直接隱式轉換。fireWork方法是面向接口編程的思想,傳入的參數為Workable數組,那數組中的所有元素都可以執行

doTask方法(這正是接口約束帶來的效果),而不管他們的具體類型。

抽象類與接口

java集合框架中的例子。抽象類不必實現接口中的方法,但是普通類一定強制實現接口中的所有方法。

接口和接口之間的extends關系

接口可以擴展extends 已經存在的接口,如果接口A擴展了接口B,則A將繼承B中的所有成員,就像他們定義在A中一樣。一個接口可以擴展多個接口。

interface Workable
{
void doTask();
}

interface SchoolMember extends Workable
{
void sayHello();
}

這樣,一個類如果要實現SchoolMember 接口,就必須實現 doTask 和 sayHello 2個方法,因為SchoolMember繼承了doTask方法。

接口的總結

1、接口不能new出實例。但可以定義接口類型的變量,去引用實現了這個接口的類的對象。此時接口相當於實現類的父類。

2、接口中的方法不實現,而是用一個 分號 ; 代替函數體。

3、接口是Java中的一種引用類型。

Copyright © Linux教程網 All Rights Reserved