1. 程式人生 > >JAVA-初步認識-第九章-抽象類-概述

JAVA-初步認識-第九章-抽象類-概述

聲明 其他 描述 很多 font 是什麽 之間 修飾 既然

一.

技術分享

繼承中還有一部分,叫抽象類。

技術分享

為什麽會出現抽象類,舉個例子。

技術分享

截圖中,DemoA和DemoB兩個類具有相同的方法,如果兩者之間沒有繼承關系,那就可以向上抽取。抽取之後,子類繼承父類即可。而且子類中的內容可以省略不寫,下面截圖中保留了,其實可以省略。

技術分享

這就是我們之前所講的繼承,發現事物之間的關系,並將共性進行向上抽取。這樣的話,可以提高代碼的復用性。

可是我們產生了一個問題:DemoA和DemoB確實有相同的功能,但是內容不一樣。我們都知道功能內部一般都處於封裝形式,DemoA必然有顯示功能,DemoB必然有顯示功能,但是內容卻不同。那就意味著函數分兩部分,第一部分叫聲明是一致的,函數體或者函數內容不一致。所以我們能明確,它們也具備共性,聲明相同,功能內容不相同,我們也可以向上抽取,因為它們具備相同的功能。

技術分享

我們抽取了方法的聲明,但是內容不能抽,抽不上來。最終形成的如下。叫做這類事物都具備這個功能,但是這工作的內容卻不知道,因為每一個具體的事物都不知道。既然這個功能不能用大括號結束,定義不了內容的話,就用分號結束。結束語句,要麽用大括號,要麽用分號。

技術分享

我們觀看下面的截圖,抽取出來的內容,真看不懂。這樣的函數一定要做標識,怎麽標呢?一定要用一個關鍵字abstract,就是抽象的意思。

技術分享

技術分享

抽象關鍵字修飾函數,就稱為抽象函數。抽象函數所在的類也必須標識成抽象的,為什麽呢?這個事物當中,具備一個功能。這個功能是什麽,怎麽做的,不知道。那麽這個事物也不具體。這個就是抽象類的由來。(有必要這麽抽取麽?)

技術分享

下面再舉了一個例子,來描述抽象類。這裏寫的時候,我們是從下往上寫的,先寫了狗和狼,然後對相同的功能進行了抽取。但是,實際開發中,是通過分析,先有class 犬科,然後根據功能中具體內容的不同,分為狗和狼。

技術分享

功能細節確定不了,就是抽象方法,不具體的方法。犬科這個事物也具體不了。

狗和狼繼承了犬科,真正能具體吼叫,都是這些具體的事物,

技術分享

有人會說,那既然功能的內容都不一樣,那麽就將犬科刪去,幹嘛還要抽象。但是在實際中,除了吼叫,還有其他功能,比如睡覺,無論狗還是狼,都是趴著睡覺。這樣一來就不是抽象的。

(現在這麽講是有用處的,後面講多態就知道了。)

抽取和不抽取是有區別的,抽取也沒內容,還不是由子類來實現麽。在用的時候,不一樣。讓狗叫一下,得指揮狗。讓狼叫一下,得指揮狼....很多種,直接指揮犬科吼叫,就簡單多了。

講述抽象類的原因就在於不斷地抽取,這樣就會產生抽象的東西,就需要抽象類。

JAVA-初步認識-第九章-抽象類-概述