CodeGym /課程 /Java 核心 /如何使用抽像類

如何使用抽像類

Java 核心
等級 3, 課堂 3
開放

“你好,阿米戈!昨天你學習了抽像類的方法,現在是加深我們知識的時候了。我想教你如何正確使用抽像類。”

很難為抽像類想出一個現實世界的類比。類通常是某個實體的模型。但是抽像類包含沒有實現的方法,也可以包含已經實現的方法。這意味著什麼?我們可以找到抽像類的什麼類比?現實世界中有這樣的事情嗎?

其實是有的。想像一下傳送帶上一輛幾乎完成的汽車的底盤。我可以安裝增強型引擎或高效引擎。皮革內飾或織物內飾。該車的具體實施方式尚未確定。更重要的是,底盤可用於生產幾種特定的實施方式。但是沒有人想要目前形式的汽車。這是一個經典的抽像類:創建它的實例沒有意義,所以你不能創建它們;該類之所以有意義,是因為將在其基礎上創建許多成熟的繼承人。

“這很容易。”

但還可以有更抽象的類比。更像是帶有一些已實現方法的接口。例如,考慮一位專業口譯員。在不指定源語言和目標語言的情況下,我們有一個“抽象翻譯器”。或者考慮保鏢。我們可能知道他精通武術,可以保護他的客戶。但具體有哪些武功,如何保護委託人,則是每個具體保鏢的“實施細則”。

讓我們看一個例子:

Java代碼 描述
abstract class BodyGuard
{
 abstract void applyMartialArts(Attacker attacker);

 void shoot(Attacker attacker)
 {
    gun.shoot(attacker);
 }

 void saveClientLife(Attacker attacker)
 {
  if (attacker.hasGun())
     shoot(attacker);
  else
     applyMartialArts(attacker);
 }
}
BodyGuard 類決定如何應對攻擊:射擊或使用武術。

然而,具體的武學沒有具體說明,但我們確信該技能存在。

我們可以創建幾個不同的保鏢(通過繼承這個類)。他們所有人都將能夠保護客戶並射殺攻擊者。

“你是對的。它很像一個接口,帶有一些已實現的方法。”

“是的,這種類型的抽像類在標準 Java SE 類中很常見。”

3
任務
Java 核心, 等級 3, 課堂 3
上鎖
Code entry
Your attention, please! Now recruiting code entry personnel for CodeGym. Turn up your focus, let your fingers relax, read the code, and then... type it into the appropriate box. Code entry is far from a useless exercise, though it might seem so at first glance: it allows a beginner to get used to and remember syntax (modern IDEs seldom make this possible).
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION