Java 抽象類和方法
抽象類是 Java 中的類,它宣告瞭一個或多個抽象方法。
想一下由 String 類組成的類層次結構,該類由三個類 Rectangle、Circle 和 Triangle 繼承。建立 Shape 類是為了儲存由三個類 Rectangle、Circle 和 Triangle 共享的公共屬性和方法。 calculateArea()
是一個由所有三個子類共享並存在於 Shape 類中的方法。
在本教程中,你將學習 -
- 什麼是抽象類?
- 什麼是抽象方法?
- Java 中的抽象類和方法重點
- Java 中的最終關鍵字
現在,假設你編寫程式碼來為上面描述的類建立物件。讓我們觀察這些物體在實際世界中的外觀。
矩形類的一個物件將給出一個矩形,這是我們在日常生活中常見的形狀。
三角形類的物件將給出三角形,這也是常見的日常形狀。
但是在實際世界中,Shape
類的物件會是什麼樣子?
如果你觀察到 Shape 類用於實現繼承和多型的目標。但它不是為例項化而構建的。這些類可以標記為 Abstract
,無法例項化抽象類。
語法:
abstract class Shape{
//code
}
你有可能不會將 Shape 類標記為 Abstract,然後將其例項化。但是這樣的物件在你的程式碼中沒用,並且會為潛在的錯誤開啟一個空間。因此這是不可取的。
什麼是抽象方法?
抽象方法是一種只包含方法定義但不包含實現的方法。
眾所周知,矩形、圓形和三角形的面積計算公式是不同的。 calculateArea()
方法必須由繼承類重寫。在 Shape 類中定義它是沒有意義的,但我們需要確保所有繼承類都有這個方法。
這些方法可以標記為 abstract
。
語法:
abstract public void calculateArea();
對於抽象方法,不需要具體實現,僅定義方法的簽名。
Java 中的抽象類:重點
-
抽象類也可以有具體(完整)方法。
-
出於設計目的,即使類不包含任何抽象方法,也可以將類宣告為抽象類
-
抽象類的引用可以指向其子類的物件,從而實現執行時多型性,比如
Shape obj = new Rectangle();
-
如果一個類有一個或多個抽象方法,則必須強制標記為抽象類。
Java 中的 final
關鍵字
final
修飾符適用於類、方法和變數。 final
的含義因環境而異,但基本思想是相同的。
final
類不得繼承final
變數變為常量,其值無法更改。final
方法可能不會被重寫。這是出於安全原因而完成的,並且這些方法用於優化。
示例: - 學習 abstract
和 final
關鍵詞
步驟 1: 將以下程式碼複製到編輯器中。
abstract class Shape{
final int b = 20;
public void display(){
System.out.println("This is display method");
}
abstract public void calculateArea();
}
public class Rectangle extends Shape{
public static void main(String args[]){
Rectangle obj = new Rectangle();
obj.display();
//obj.b=200;
}
//public void calculateArea(){}
}
步驟 2: 儲存、編譯和執行程式碼。
步驟 3: 錯誤出現的原因是抽象方法未在 Rectangle 類中實現。要修復此問題,請取消註釋#15。
步驟 4: 取消註釋行#13。儲存並編譯程式碼。
步驟 5: 錯誤出現的原因是變數 b 是 final
型別。