2014-02-28 92 views
15

爲什麼我們需要Java中的抽象類?如果你永遠不會把它變成一個物體,爲什麼它首先呢?你如何使用它?爲什麼在那裏?我在抽象方法中想知道同樣的事情。我覺得它看起來像一個類似的概念,有一個超級類,沒有任何重要的子類可以做。爲什麼我們需要Java中的抽象類?

+4

@blunderboy - 相信我,這比他/她最後一次提問要溫和得多。 –

+1

沒有多少證據顯示​​上次讀過答案,但至少有禮貌。 – keshlam

+0

@keshlam在他/她有機會閱讀它之前可能已被刪除。我正在刪除這個問題時編輯了這個問題,希望能夠保存它,但是我太慢了。 –

回答

24

抽象類可以用作其他類的模板類型。抽象類將爲所有擴展它的類提供通用功能。

例如:

Abstract Class Animal 

所有的動物移動,呼吸和繁殖,從而可以將這些放入動物類。

現在

Concrete Class Dog, Cat etc. 

已經提供這些基本功能。

+0

這是一個很好很簡單的解釋。我喜歡那個答案。所以你可以使用抽象類的SUBCLASSES。抽象方法是相同還是不存在子方法? – user3314801

+0

如果您滿意,您應該接受這個答案。 – nafizh

+0

但是,如果聲明例如抽象「動物」上的「呼吸()」,甚至「呼吸()」聲明(沒有函數的「主體」),所以我們需要重新創建「呼吸()」 「狗」和「貓」,什麼是「動物」的好處呢? – Sushi

12

抽象類允許在類中提供一組方法的默認實現。由於它們是不完整的,因此它們不能被實例化和使用,但它們可以被子類化,以特定於特定實現的方式添加缺少的細節,並且可以實例化這些子類。

如果沒有抽象類,你將不得不提供你打算重寫的方法的虛擬實現...可以完成的任務,但是會有忘記實現其中一個的風險。讓一些方法保持完全抽象可以確保真正的實現必須填補空白,或者繼續自我抽象並迫使其後代這樣做。

這不是沒有語言無法生存的東西。但它非常有用。隨着您更加精通Java和OO設計,您會發現它有多麼有用。

(請注意,我們說同樣的話,基本上,你最後一次提出了這個問題。所以,如果你還在迷茫,你可能想更具體的瞭解到底發生了混淆你。)

8

的抽象類的很多用途,抽象類的主要目的是作爲基類,它可以被子類擴展以創建一個完整的實現。

例如,

你可能在你的程序中實現三個步驟,

  • 行動
  • 前幾步操作後進行
  • 幾個步驟中的一些動作

所以在這種情況下,你可以用三種方法定義一個抽象類像這樣:

public abstract MyAbstractProcess { 
    public void stepBefore() { 
     //implementation directly in abstract superclass 
    } 

    public abstract void action(); // implemented by subclasses 

    public void stepAfter() { 
     //implementation directly in abstract superclass 
    } 
} 

另外,上面的抽象類Animal的例子也是一個很好的例子。

相關問題