1. 程式人生 > >第6篇 Java中的接口與抽象類

第6篇 Java中的接口與抽象類

集合 conn event int str ckey 實現類 bst div

接口 Interface

在JAVA編程語言中是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過實現接口(implements)的方式,從而實現接口的抽象方法。

  • 接口通過interface關鍵字來定義
  • 接口中不能實現方法,但是能聲明方法
  • 類通過implements關鍵字來實現接口
  • 一個類如果實現了接口,就必須實現接口中的所有方法
  • 一個類可以通過implements關鍵字實現多個接口,但只能繼承一個父類
  • 面向接口的多態(接口的引用指向其實現類)
  • 接口不能被實例化
  • 接口中的方法都是抽象方法
  • 接口中一般沒有屬性,有則必須被聲明為pulic static & final形式(不聲明編譯器自動設置為 public static final類型)

接口與類的區別

  • 接口不能實例化對象
  • 接口沒有構造方法
  • 接口中所有方法必須是抽象方法
  • 接口不能包含成員變量,除非是public static final變量
  • 接口不是被類繼承了,而是要被類實現
  • 接口支持多繼承(接口與接口之間只能是繼承extends的關系,可以多繼承)

抽象類與接口的區別

  • 抽象類中可以普通方法和抽象方法共存
  • 抽象類中可以有各種類型的成員變量
  • 接口中不能含有靜態方法,抽象類中可以有
  • 一個類只能繼承一個抽象類,卻可以實現多個接口

接口的聲明

(想了想還是菜鳥教程的聲明寫的好看些)

[可見度] interface 接口名稱 [extends 其他的類名] {
        
// 聲明變量 // 抽象方法 }

接口的實現

類在實現接口時必須實現接口的所有方法。

接口可以實現多態的功能。

示例

interface USB{
    public void connect();
}
//鼠標類實現USB接口
class Mouses implements USB{

    @Override
    public void connect() {
        System.out.println("鼠標連接USB");
    }
}
//鍵盤類實現USB接口
class KeyBoard implements USB{

    @Override
    
public void connect() { System.out.println("鍵盤連接USB"); } }

我們可以通過下面的方法來實現不同對象對接口的實現:

public static void useUSB(USB usb) {
    usb.connect();
}

public static void main(String[] args) {
    Mouses mouses = new Mouses();
    KeyBoard keyBoard = new KeyBoard();
    useUSB(mouses);
    useUSB(keyBoard);
}

通過給useUSB方法來傳入不同的USB接口對象,從而達到多態的效果。最後打印結果如下:

鼠標連接USB
鍵盤連接USB

接口的繼承

這裏由於老師上課並沒有重點提,不過在後面集合一章就是很明顯的例子。

叠代器接口:

public interface Iterable<T> {
    /**
     * 叠代器的一些方法
     */

  ......
}

Collection 接口:

public interface Collection<E> extends Iterable<E> {
 
    /**
     * Collection 的一些方法
     */

  ......

}

List 接口:

public interface List<E> extends Collection<E> {

    /**
     * List 的一些方法
     */

  ......
}

接口的多繼承

接口的繼承與類的繼承一點很大的區別就在於接口可以多繼承,多繼承的方式與類實現多個接口的形式類似:

public interface Hockey extends Sports, Event

Java 抽象類(面試)

用·abstract修飾的類叫做抽象類

抽象類的一些特點

  • 抽象類不能被實例化,只能實例化抽象類的子類。
  • 抽象類不一定包含抽象方法,但包含抽象方法的一定是抽象類
  • 構造方法不能被聲明成抽象方法
  • 子類必須父抽象類的所有抽象方法,除非子類也是抽象類
  • 用abstract修飾的方法稱之為抽象方法,抽象方法只有方法聲明,沒有方法體
  • 抽象類中的方法可以是抽象方法,也可以是普通方法
  • 沒有抽象的屬性,屬性不能被abstract修飾

第6篇 Java中的接口與抽象類