Java介面實現

實現介面

介面指定對象必須提供的協議。類可以提供介面的抽象方法的部分實現,並且在這種情況下,類必須將自身聲明為抽象。

實現介面的類使用“implements”子句來指定介面的名稱。“implements”子句由關鍵字implements,後跟逗號分隔的介面類型列表組成。

一個類可以實現多個介面。實現介面的類聲明的一般語法如下:

<modifiers> class  <class-Name>  implements <comma-separated-list-of-interfaces>  {
    // Class body  goes  here
}

假設有一個Circle類。

public class Circle implements Shape {
   void  draw(){
      System.out.println("draw circle");
   }
}

實現介面的類必須重寫以實現介面中聲明的所有抽象方法。 否則,類必須聲明為abstract。介面的默認方法也由實現類繼承。植入類可以選擇不需要重寫默認方法。介面中的靜態方法不會被實現類繼承。
下麵的代碼定義了兩種引用類型,一種來自Circle類,另一種來自介面類型。

Circle c = new Circle();
Shape shape = new Circle();

變數cCircle類型。它指的是Circle對象。第二個賦值也是有效的,因為Circle類實現了Shape介面,而Circle類的每個對象也都是Shape類型。

實現介面方法

當一個類完全實現了一個介面時,它為所實現的介面的所有抽象方法提供一個實現。介面中的方法聲明包括方法的約束。例如,方法聲明中的throws子句是方法的約束。

import java.io.IOException;
interface Shape {
  void draw(double amount) throws IOException;
}
class Main implements Shape{

  @Override
  public void draw(double amount) {
    // TODO Auto-generated method stub
  }
}

Main的代碼是有效的,即使它丟棄了throws子句。當類覆蓋介面方法時,允許刪除約束異常。如果使用Shape類型,必須處理IOException

import java.io.IOException;

interface Shape {
  void draw(double amount) throws IOException;
}
class Main implements Shape{

  @Override
  public void draw(double amount) {
    // TODO Auto-generated method stub

  }
  public void anotherMethod(){
    Shape s = new Main();
    try {
      s.draw(0);
    } catch (IOException e) {
      e.printStackTrace();
    }
    draw(0);
  }
}

實現多個介面

一個類可以實現多個介面。類實現的所有介面都在類聲明中的關鍵字implements之後列出。
通過實現多個介面,類為所有介面中的所有抽象方法提供實現。

interface Adder {
  int add(int n1, int n2);
}
interface Subtractor {
  int subtract(int n1, int n2);
}
class Main implements Adder, Subtractor {
  public int add(int n1, int n2) {
    return n1 + n2;
  }
  public int subtract(int n1, int n2) {
    return n1 - n2;
  }
}

部分實現介面

類不必為所有方法提供實現。如果一個類不提供介面的完全實現,它必須聲明為abstract

interface Calculator {
  int add(int n1, int n2);

  int subtract(int n1, int n2);
}
abstract class Main implements Calculator{
  public int add(int n1, int n2) {
    return n1 + n2;
  }
}

上一篇: Java介面作為類型 下一篇: Java介面繼承