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 方法可能不會被重寫。這是出於安全原因而完成的,並且這些方法用於優化。

示例: - 學習 abstractfinal 關鍵詞

步驟 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 型別。