Java 接口實(shí)現(xiàn)

2018-01-19 16:58 更新

Java面向?qū)ο笤O(shè)計(jì) - Java接口實(shí)現(xiàn)

實(shí)現(xiàn)接口

接口指定對(duì)象必須提供的協(xié)議。

類可以提供接口的抽象方法的部分實(shí)現(xiàn),并且在這種情況下,類必須將自身聲明為抽象。

實(shí)現(xiàn)接口的類使用“implements”子句來(lái)指定接口的名稱。

“實(shí)現(xiàn)”子句由關(guān)鍵字implements,后跟逗號(hào)分隔的接口類型列表組成。

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

實(shí)現(xiàn)接口的類聲明的一般語(yǔ)法如下:

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

假設(shè)有一個(gè)Circle類。

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

實(shí)現(xiàn)接口的類必須重寫(xiě)以實(shí)現(xiàn)接口中聲明的所有抽象方法。否則,類必須聲明為abstract。

接口的默認(rèn)方法也由實(shí)現(xiàn)類繼承。

植入類可以選擇不需要重寫(xiě)默認(rèn)方法。

接口中的靜態(tài)方法不會(huì)被實(shí)現(xiàn)類繼承。

下面的代碼定義了兩種引用類型,一種來(lái)自Circle類,另一種來(lái)自接口類型。

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

變量c是Circle類型。它指的是Circle對(duì)象。

第二個(gè)賦值也是有效的,因?yàn)镃ircle類實(shí)現(xiàn)了Shape接口,而Circle類的每個(gè)對(duì)象也都是Shape類型。


實(shí)現(xiàn)接口方法

當(dāng)一個(gè)類完全實(shí)現(xiàn)了一個(gè)接口時(shí),它為所實(shí)現(xiàn)的接口的所有抽象方法提供一個(gè)實(shí)現(xiàn)。

接口中的方法聲明包括方法的約束。例如,方法聲明中的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子句。當(dāng)類覆蓋接口方法時(shí),允許刪除約束異常。

如果我們使用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); 
  }
}

實(shí)現(xiàn)多個(gè)接口

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。類實(shí)現(xiàn)的所有接口都在類聲明中的關(guān)鍵字implements之后列出。

通過(guò)實(shí)現(xiàn)多個(gè)接口,類同意為所有接口中的所有抽象方法提供實(shí)現(xiàn)。

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;
  }
}

部分實(shí)現(xiàn)接口

類不必為所有方法提供實(shí)現(xiàn)。

如果一個(gè)類不提供接口的完全實(shí)現(xiàn),它必須聲明為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;
  }
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)