2012-12-11 80 views
40

可能重複:
Abstract class in Java什麼是抽象類和抽象方法?

我有好幾種說法,但到目前爲止,我無法理解什麼是Java中的抽象類和方法。有人說它必須對程序的安全性做些什麼,其他人說它不是那樣的。

即使從Dietel & Dietel的書我不明白它的目的。 何時何地使用它?

請好好解釋一下,就像你在教初學者,我真的很感謝你的幫助。

+4

你讀過了嗎? http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html – PeterMmm

+0

我得到的只是它們不能被實例化,我不明白它們的完整目的。爲什麼我們需要它時,我們已經有訪問說明符。 –

+1

抽象類可幫助設計人員強制開發人員實施所需的方法。 – Suranga

回答

72

抽象類是一個無法實例化的類。它只是用於其他類的擴展。

抽象方法是抽象類中的方法(必須聲明爲抽象),這意味着擴展的具體類必須覆蓋它們,因爲它們沒有主體。

抽象類的主要目的是如果你有在子類中使用的通用代碼,但抽象類不應該有它自己的實例。

你可以閱讀更多關於它在這裏:Abstract Methods and Classes

+4

擴展具體類必須重寫抽象方法。 – Suranga

+1

在Java術語中,抽象方法可以重寫另一個抽象方法。關鍵是要爲所有抽象方法提供一個實現。 –

1

一個抽象類是不能創建從對象,因此它主要用於繼承一個類。(我不知道,如果你可以在它的靜態方法)

抽象方法是子類必須重寫的方法,它沒有主體,標記爲抽象,只有抽象類可以擁有這些方法。

0

使用抽象類可以爲其他類擴展一些骨架。

你不能實例化它們,但是你可以在擴展它們的類中使用一些常用的實現。

15

抽象方法是一個沒有主體的方法簽名聲明。例如:

public abstract class Shape { 
    . . . 

    public abstract double getArea(); 
    public abstract double getPerimeter(); 
} 

的方法getArea()getPerimeter()都是抽象的。因爲Shape類具有抽象方法,所以必須也被聲明爲abstract。沒有任何抽象方法也可以聲明一個類abstract。當一個類是抽象的,它的一個實例不能被創建;人們只能創建(具體)子類的實例。具體類是一個沒有聲明爲抽象的類(因此沒有抽象方法並實現了所有繼承的抽象方法)。例如:

public class Circle extends Shape { 
    public double radius; 
    . . . 

    public double getArea() { 
     return Math.PI * radius * radius; 
    } 

    public double getPerimeter() { 
     return 2.0 * Math.PI * radius; 
    } 
} 

有很多原因要做到這一點。一種方法是編寫一種方法,對於所有形狀都是相同的,但取決於在Shape級別未知的形狀特定行爲。舉例來說,一個可以編寫方法:

public abstract class Shape { 
    . . . 

    public void printArea(PrintStream out) { 
     out.println("The area is " + getArea()); 
    } 
} 

誠然,這是一個人爲的例子,但它表明了基本思路:定義的明確的行爲方面的具體行爲。

擁有抽象類的另一個原因是您可以部分實現接口。在接口中聲明的所有方法都由任何實現該接口的類繼承爲抽象方法。有時候你想要在類中提供一個接口的部分實現,並將細節留給子類;部分實現必須聲明爲抽象。

+0

無論如何,這個例子對我來說非常清楚。 – Rockstar5645

0

一旦你在Java中得到了什麼抽象的意思,你會問:爲什麼他們把它放在? Java可能沒有抽象的東西,但它是某種OO風格或詞彙的一部分。確實存在抽象類或方法是表達程序作者意圖的優雅方式的情況。大多數情況下,當你編程一個框架或一個庫將被其他人使用。

3

抽象方法沒有body.A明確的方法不能被聲明爲抽象的。

其中具有抽象方法必須聲明爲抽象

抽象類不能被實例化。

72

-Abstract class是其中一個無法實例,即object無法創建。

-Abstract method方法的沒有它的定義聲明。

- A Non-abstract class可以只有非抽象方法。

-一個Abstract class可以既有非抽象和抽象方法。

- 如果Class有一個Abstract method那麼類也必須是抽象的。

-一個Abstract method必須由第一個非抽象子類實現。

-Abstract classDesign patterns用於封裝了不斷變化的行爲。

+0

這是一個非常有用的答案。 – user10607

相關問題