JAVA中的介面和抽象類深入理解

2021-04-22 11:10:54 字數 1800 閱讀 9408

抽象類往往用來表徵我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它們例項化(拿不出乙個具體的東西)所以稱之為抽象。

比如:我們要描述「水果」,它就是乙個抽象,它有質量、體積等一些共性(水果有質量),但又缺乏特性(蘋果、橘子都是水果,它們有自己的特性),我們拿不出唯一一種能代表水果的東西(因為蘋果、橘子都不能代表水果),可用抽象類來描述它,所以抽象類是不能夠例項化的。當我們用某個類來具體描述「蘋果」時,這個類就可以繼承描述「水果」的抽象類,我們都知道「蘋果」是一種「水果」。

在物件導向領域,抽象類主要用來進行型別隱藏。我們可以構造出乙個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現則表現為這個抽象類的所有派生類。

介面和抽象類中的所有抽象方法不能有具體實現,而應在它們的子類中實現所有的抽象方法(要有函式體,哪怕裡是空的),java的設計者可能為抽象方法的靈活性考慮,每個子類可根據自己的需要來實現抽象方法。

抽象類(abstract class)的定義方式如下:

public abstract class abstractclass             //裡面至少有乙個抽象方法

public void method3() 

介面(inte***ce)的定義方式如下:

public inte***ce inte***ce

簡言之抽象類是一種功能不全的類,介面只是乙個抽象方法宣告和靜態不能被修改的資料的集合,兩者都不能被例項化。

從某種意義上說,介面是一種特殊形式的抽象類,在java語言中抽象類表示的是一種繼承關係,乙個類只能繼承繼承乙個抽象類,而乙個類卻可以實現多個介面。在許多情況下,介面確實可以代替抽象類,如果你不需要刻意表達屬性上的繼承的話。

進一步理解:

1、從類的層次結構上看,抽象類是在層次的頂端,但在實際的設計當中,一般來說抽象類應當是後面才會出現。為什麼?實際上抽象類的獲取有點像數學中的提取公因式:ax+bx,x就是抽象類,如果你沒有前面的式子,你怎麼知道x是不是公因式呢?在這點上,也符合人們認識世界的過程,先具體後抽象。因此在設計過程中如果你得到大量的具體概念並從當中找到其共性時,這個共性的集合就是抽象類應當是沒錯的。

2、inte***ce從表面上看,和抽象類很相似,但用法完全不同。它的基本功能就是把一些毫不相關的類(概念)集合在一起形成乙個新的、可集中操作的「新類」。我給學生的乙個典型例子就是「司機」。誰可以當司機?誰都可以,只要領取了駕照。所以我不管你是學生,白領、藍領還是老闆,只要有駕照就是司機。

inte***ce driverlicence

class studentdriver extends student implements driverlicence

class whtiecollaremployeedriver extends whtiecollaremployee implements driverlicence

class bluecollaremployeedriver extends bluecollaremployee implements driverlicence

class bossdriver extends boss implements driver

當我定義了「汽車」類後,我就可以指定「司機」了。

class car

這時候,car的物件並不關心這個司機到底是幹什麼的,他們的唯一共同點是領取了駕照(都實現了driverlicence介面)。這個,應當是介面最強大的地方也是抽象類無法比擬的。

總結:抽象類是提取具體類的公因式,而介面是為了將一些不相關的類「雜湊」成乙個共同的群體。

深入理解Java的介面和抽象類

一 抽象類 二 介面 三 抽象類和介面的區別 抽象方法 它只有宣告,沒有具體的實現。抽象方法的宣告格式為 abstract void fun 抽象方法必須用 abstract 關鍵字來修飾,如果乙個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字來修飾。因為抽象類中沒有具...

深入理解Java中的介面與抽象類

一 抽象類 抽象方法 只宣告而未實現的方法,即沒有方法體 public abstract void getmessage 抽象方法抽象類 普通類的超集,只是比普通類多了一些抽象方法而已 所有抽象方法要求使用abstract關鍵字來定義,並且抽象方法所在的類也一定要使用abstract關鍵字來 定義,...

深入理解java抽象類

在物件導向的概念中,所有的物件都是通過類來描述的,但是並不是所有的類都描述了物件,有些類裡面並沒有包含足夠的資訊來描述物件,這些類被認為是抽象類。抽象類與普通類的區別就在於抽象類不能被例項化,這就決定了抽象類必須有子類實現它的抽象方法 抽象類只是在普通類的基礎上擴充了一些抽象方法而已,所謂的抽象方法...