Java 抽象類別

[Java] 介面及抽象類別的差異

介面是和抽象類別很像的東西,就把想到的打在下面,以免忘記。

(1)本身具有資料成員及抽象函式,必須以interface來宣告。

interface 介面名稱
{
  資料成員;
  抽象方法;
}

(2)資料成員必須初使化,本身為public static final 型態,亦可省略不宣告,由系統自動幫忙宣告。

(3)介面中若有多個函式,則必須同時宣告為abstract型態,且修飾子只能宣告為public或不宣告。

class 類別名稱 implements 介面1(,介面2,.....)
{
}

(4)介面不可使用new 運算子產生物件,而利用介面A打造新的類別B的過程,稱之為B實作介面A。

(5)可使用類別B實作多兩個以上的介面,但不可使用類別B繼承兩個以上的抽象類別。

>class 類別名稱 implements 介面1(,介面2,.....)
{
}

(6)介面和類別一樣,都具有繼承的功能,但一個子介面可繼承多個父介面,但一個子類別不可繼承多個父類別。

interface 介面名稱 extends 介面1(,介面2,.....)
{
}

(7)介面通常用來描述外部的能力,如機車的輪胎型狀等。

(8)需要使用迂迴的方式去找出實體類別間的對應關係,所以與抽象類別的速度相比之下,較為緩慢。

[Java] 什麼是抽象類別 (abstract class)呢?

Java 中有所謂的抽象類別,在他的API中,亦大量使用抽象類別,而抽象類別是什麼呢?海芋就將他整理如下:

(1) 目的:讓程式設計師能依據此類別,來修改或建立新的類別。

(2) 格式:

abstract class 類別名稱
{
資料成員;
抽象方法;
實體方法;
}

其中,抽象方法不能定義處理方法,且其修飾子亦不能為private,否則子類別無法繼承,進而無法改寫;而資料成員亦可不必初始化,可以由子類別實做並初使化。

(3) 子類別可繼承自抽象類別,並改寫抽象類別中,未定義的處理方式的抽象方法,或是已定義處理方式的方法或變數,但仍然要遵守單一繼承的規定。而抽象類別亦可以存取被子類別物件中,被子類別改寫的成員。

(4) 抽象類別不能用來直接建立物件,因為其定義未有明確的定義。

(5) 若子類別未能改寫父抽象類別中所定義的抽象方法,則此子類別亦需宣告為抽象類別。

(6) 抽象類別比較常用在產品的內部,如USB的接頭是固定的,但是傳輸速度可能會所差異,傳輸速度便可宣告為抽象類別,再由子類別去實做。

(7) 不需要使用迂迴的方式去找出實體類別間的對應關係,所以與介面的速度相比之下,較為快速。

剩下的有想到再補吧!有錯也歡迎指正唷!