搜尋
首頁Javajava教程java中抽象類別和介面在語法、設計層面上的區別

本文講解java中抽象類別和介面的區別:1.語法層面的區別;2.設計層面上的區別。

1.語法層面上的差異

  1)抽象類別可以提供成員方法的實作細節,而介面中只能存在public abstract 方法;

  2)抽象類別中的成員變數可以是各種類型的,而介面中的成員變數只能是public static final類型的;

  3)介面中不能含有靜態程式碼區塊以及靜態方法,而抽象類別可以有靜態程式碼區塊和靜態方法;

  4)一個類別只能繼承一個抽象類,而一個類別卻可以實作多個介面。

2.設計層面上的區別

  1)抽象類別是對一種事物的抽象,即對類別抽象,而介面是對行為的抽象。抽象類別是對整個類別整體進行抽象,包括屬性、行為,但是介面卻是對類別局部(行為)進行抽象化。舉個簡單的例子,飛機和鳥是不同類的事物,但是它們都有一個共通性,就是都會飛。那麼在設計的時候,可以將飛機設計為一個類Airplane,將鳥設計為一個類Bird,但是不能將飛行這個特性也設計為類,因此它只是一個行為特性,並不是對一類事物的抽象描述。此時可以將 飛行 設計為一個介面Fly,包含方法fly( ),然後Airplane和Bird分別依照自己的需求實作Fly這個介面。然後至於有不同種類的飛機,例如戰鬥機、民用飛機等直接繼承Airplane即可,對於鳥也是類似的,不同種類的鳥直接繼承Bird類即可。從這裡可以看出,繼承是一個 "是不是"的關係,而 介面 實作則是 "有沒有"的關係。如果一個類別繼承了某個抽象類,則子類別必定是抽象類別的種類,而介面實作則是有沒有、具備不具備的關係,例如鳥是否能飛(或是否具備飛行這個特點),能飛行則可以實作這個接口,不能飛行就不實作這個接口。

  2)設計層面不同,抽象類別作為許多子類別的父類,它是一種模板式設計。而介面是一種行為規範,它是一種輻射式設計。什麼是模板式設計?最簡單例子,大家都用過ppt裡面的模板,如果用模板A設計了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它們的公共部分需要改動,則只需要改動模板A就可以了,不需要重新對ppt B和ppt C進行改動。而輻射式設計,例如某個電梯都裝了某種警報器,一旦要更新警報器,就必須全部更新。也就是說對於抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現,子類可以不進行變更;而對於接口則不行,如果接口進行了變更,則所有實現這個接口的類別都必須進行相應的改動。

  下面看一個網路上流傳最廣泛的例子:門和警報的例子:門都有open( )和close( )兩個動作,此時我們可以定義透過抽象類別和介面來定義這個抽象概念:

abstract class Door {

public abstract void open();
public abstract void close();

}

#  或:

interface Door {

public abstract void open();
public abstract void close();

}

#  但是現在如果我們需要閘具有警報alarm( )的功能,那麼該如何實現?以下提供兩種想法:

  1)將這三個功能都放在抽象類別裡面,但是這樣一來所有繼承於這個抽象類別的子類別都具備了警報功能,但是有的門並不一定具備警報功能;

  2)將這三個功能都放在介面裡面,需要用到警報功能的類別就需要實作這個介面中的open( )和close( ),也許這個類根本就不具備open( )和close( )這兩個功能,例如火災警報器。

  從這裡可以看出, Door的open() 、close()和alarm()根本就屬於兩個不同範疇內的行為,open()和close()屬於門本身固有的行為特性,而alarm()屬於延伸的附加行為。因此最好的解決辦法是單獨將警報設計為一個接口,包含alarm()行為,Door設計為單獨的一個抽象類,包含open和close兩種行為。再設計一個警報門繼承Door類別和實作Alarm介面。

interface Alram {

void alarm();

}

abstract class Door {

void open();
void close();

}

class AlarmDoor extends Door implements Alarm {

void oepn() {
  //....
}
void close() {
  //....
}
void alarm() {
  //....
}

}

相關文章:

介面與抽象類別的區別,介面抽象類別區別

java 中的介面與抽象類別

相關影片:

介面與抽象類別差異-最新Java完整影片教學

#

以上是java中抽象類別和介面在語法、設計層面上的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具