我有好幾種說法,但到目前爲止,我無法理解什麼是Java中的抽象類和方法。有人說它必須對程序的安全性做些什麼,其他人說它不是那樣的。
即使從Dietel & Dietel的書我不明白它的目的。 何時何地使用它?
請好好解釋一下,就像你在教初學者,我真的很感謝你的幫助。
我有好幾種說法,但到目前爲止,我無法理解什麼是Java中的抽象類和方法。有人說它必須對程序的安全性做些什麼,其他人說它不是那樣的。
即使從Dietel & Dietel的書我不明白它的目的。 何時何地使用它?
請好好解釋一下,就像你在教初學者,我真的很感謝你的幫助。
抽象類是一個無法實例化的類。它只是用於其他類的擴展。
抽象方法是抽象類中的方法(必須聲明爲抽象),這意味着擴展的具體類必須覆蓋它們,因爲它們沒有主體。
抽象類的主要目的是如果你有在子類中使用的通用代碼,但抽象類不應該有它自己的實例。
你可以閱讀更多關於它在這裏:Abstract Methods and Classes
擴展具體類必須重寫抽象方法。 – Suranga
在Java術語中,抽象方法可以重寫另一個抽象方法。關鍵是要爲所有抽象方法提供一個實現。 –
ABSTRACT CLASSES AND ABSTARCT METHODS FULL DESCRIPTION GO THROUGH IT
抽象方法沒有body.A明確定義的方法不能被聲明爲abstract。
具有抽象方法的類必須聲明爲抽象類。
抽象類不能被實例化。
一個抽象類是不能創建從對象,因此它主要用於繼承一個類。(我不知道,如果你可以在它的靜態方法)
抽象方法是子類必須重寫的方法,它沒有主體,標記爲抽象,只有抽象類可以擁有這些方法。
使用抽象類可以爲其他類擴展一些骨架。
你不能實例化它們,但是你可以在擴展它們的類中使用一些常用的實現。
抽象方法是一個沒有主體的方法簽名聲明。例如:
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());
}
}
誠然,這是一個人爲的例子,但它表明了基本思路:定義的明確的行爲方面的具體行爲。
擁有抽象類的另一個原因是您可以部分實現接口。在接口中聲明的所有方法都由任何實現該接口的類繼承爲抽象方法。有時候你想要在類中提供一個接口的部分實現,並將細節留給子類;部分實現必須聲明爲抽象。
無論如何,這個例子對我來說非常清楚。 – Rockstar5645
一旦你在Java中得到了什麼抽象的意思,你會問:爲什麼他們把它放在? Java可能沒有抽象的東西,但它是某種OO風格或詞彙的一部分。確實存在抽象類或方法是表達程序作者意圖的優雅方式的情況。大多數情況下,當你編程一個框架或一個庫將被其他人使用。
抽象方法沒有body.A明確的方法不能被聲明爲抽象的。
甲類其中具有抽象方法必須聲明爲抽象。
抽象類不能被實例化。
-Abstract class
是其中一個無法實例,即其object
無法創建。
-Abstract method
是方法的沒有它的定義聲明。
- A Non-abstract class
可以只有非抽象方法。
-一個Abstract class
可以既有非抽象和抽象方法。
- 如果的Class
有一個Abstract method
那麼類也必須是抽象的。
-一個Abstract method
必須由第一個非抽象子類實現。
-Abstract class
在Design patterns
用於封裝了不斷變化的行爲。
這是一個非常有用的答案。 – user10607
你讀過了嗎? http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html – PeterMmm
我得到的只是它們不能被實例化,我不明白它們的完整目的。爲什麼我們需要它時,我們已經有訪問說明符。 –
抽象類可幫助設計人員強制開發人員實施所需的方法。 – Suranga