W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
Java中的接口定義了一個引用類型來創(chuàng)建抽象概念。接口由類實現(xiàn)以提供概念的實現(xiàn)。
在Java 8之前,一個接口只能包含抽象方法。 Java 8允許接口具有實現(xiàn)的靜態(tài)和默認方法。
接口通過抽象概念定義不相關類之間的關系。
例如,我們可以創(chuàng)建一個Person類來表示一個人,我們可以創(chuàng)建一個Dog類來表示一只狗。
人和狗都可以走路。這里的步行是一個抽象的概念。狗可以走,人也是這樣。這里我們可以創(chuàng)建一個名為Walkable的接口來表示walk的概念。然后我們可以有Person類和Dog類來實現(xiàn)Walkable概念并提供自己的實現(xiàn)。 Person類實現(xiàn)了Walkable接口,并使人以人的方式走路。Dog類可以實現(xiàn)Walkable界面,使狗以狗的方式走路。
在下面我們將使用一個例子來說明為什么我們需要接口。
假設 Person
類有一個walk()方法。
public interface Walkable { void walk(); } class Person implements Walkable { public Person() { } public void walk() { System.out.println("a person is walking."); } } class Dog implements Walkable { public Dog() { } public void walk() { System.out.println("a dog is walking."); } }
類可以在其聲明中使用關鍵字implements實現(xiàn)一個或多個接口。
通過實現(xiàn)一個接口,類保證它將為接口中聲明的所有方法提供一個實現(xiàn),或者類將自己聲明為抽象。
如果一個類實現(xiàn)了Walkable接口,它必須提供walk()方法的實現(xiàn)。
像類一樣,接口定義了一個新的引用類型。
當定義一個新的接口(例如,Walkable)時,我們定義一個新的參考接口類型。
以下聲明有效:
Walkable w; // w is a reference variable of type Walkable
您不能創(chuàng)建接口類型的對象,因為接口是定義抽象概念。以下代碼無效:
new Walkable(); // A compile-time error
我們可以為一個類類型創(chuàng)建一個對象,但是我們可以使用一個接口類型變量來引用其類實現(xiàn)該接口的任何對象。
因為Person和Dog類實現(xiàn)了Walkable接口,所以Walkable類型的引用變量可以引用這些類的對象。
Walkable w1 = new Person(); // OK Walkable w2 = new Dog(); // OK
我們可以使用它的引用類型變量訪問接口的任何成員。由于Walkable接口只有一個成員,這是walk()方法,我們可以編寫如下代碼:
// Let the person walk w1.walk(); // Let the dog walk w2.walk();
當調用w1上的walk()方法時,它調用Person對象的walk()方法,因為w1指的是Person對象。
當調用w2上的walk()方法時,它調用Dog對象的walk()方法,因為w2指的是Dog對象。
當使用接口類型的引用變量調用方法時,它調用它所引用的對象上的方法。
下面的代碼創(chuàng)建了一個方法來使用interface我們的參數(shù)類型。
public class Main{ public static void main(String[] args) { Walkable[] w = new Walkable[2]; w[0] = new Person(); w[1] = new Dog(); Walkables.letThemWalk(w); } } class Walkables { public static void letThemWalk(Walkable[] list) { for (Walkable w : list) { w.walk(); } } }
聲明接口的一般語法是
<modifiers> interface <interface-name> { Constant-Declaration Method-Declaration Nested-Type-Declaration }
接口聲明以修飾符列表開頭,可能為空。
像類一樣,一個接口可以有一個公共或包級別的作用域。
關鍵字public用于指示接口具有公共范圍。
缺少范圍修飾符指示接口具有包級別作用域。具有包級別作用域的接口只能在其包的成員內引用。
關鍵字interface用于聲明接口,后面是接口的名稱。
接口的名稱必須是有效的Java標識符。
接口體跟在其名稱后面并放在大括號內。
接口的主體可以為空。以下是最簡單的接口聲明:
package com.w3cschool; interface Updatable { // The interface body is empty }
像類一樣,一個接口有一個簡單的名稱和一個完全限定名。關鍵字interface后面的標識符是其簡單名稱。
接口的完全限定名稱通過使用其包名稱和用點分隔的簡單名稱形成。
在上面的示例中,Updatable是簡單的名稱,com.java2s.Updatable是完全限定名稱。
使用接口的簡單和完全限定名的規(guī)則與類的規(guī)則相同。
下面的代碼聲明一個名為ReadOnly的接口。它有一個公共范圍。
package com.w3cschool; public interface ReadOnly { // The interface body is empty }
接口聲明總是抽象的,無論是否明確聲明它是抽象的。
標記接口是沒有成員的接口。
標記接口標記具有特殊含義的類。
interface Shape { } class Circle implements Shape{ } Shape c = new Circle(); if (c instanceof Shape) { System.out.println("Using a Shape object"); }
Java API有許多標記接口。 java.lang.Cloneable,java.io.Serializable和java.rmi.Remote都是標記接口。
僅具有一個抽象方法的接口被稱為功能接口。
多態(tài)性是指對象具有多種形式的能力。
多態(tài)性是對象提供其不同視圖的能力。
接口讓我們創(chuàng)建一個多態(tài)對象。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: