首頁 >Java >java教程 >Java中的抽象類別

Java中的抽象類別

PHPz
PHPz原創
2024-08-30 15:59:08922瀏覽

下面的文章提供了 Java 中抽象類別的概述。抽象類別與 Java 中的任何其他普通類別一樣。抽象類別和常規類別之間的顯著差異是建立抽象類,我們必須使用「ABSTRACT」關鍵字。它是類別實作的分離。他們用來定義其子類別的非常常見的特徵。這種類型的類別稱為抽象類別。最重要的是,我們無法建立抽象類別的物件。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

抽象類別可以包含抽象方法和非抽象方法。但是,它們不能包含子類別只能提供的抽象方法的主體。如果子類別沒有實作抽象方法,那麼我們必須明確地將其設為抽象方法。換句話說,如果一個類別包含抽象方法,它必須將自己定義為 ABSTRACT。我們可以使用抽象類別將多個Java類別分組,優化程式碼,使程式碼更具可讀性,減少冗餘。它還為未來的課程提供了模板。

Java 中抽象類別的語法

抽象類別的語法如下:

Java中的抽象類別

抽象類別在 Java 中如何運作?

  • 抽象類別有一個抽象方法和一個非抽象方法,即沒有主體的抽象方法,並且它們可以有具有實現的方法。
  • 抽象類別用於提供特定於不同類別的最常見功能。子類別可以根據自己的需求或要求以不同的方式實作這些抽象方法。
  • 我們無法使用new操作符建立抽象類別的對象,但我們仍然可以定義它的建構函數,該構造函數只能在其子類別的建構子中呼叫。子類別構造函數可以存取超類別建構函式來初始化其變量,該變數可能會在子類別中用於進一步的需求。

Java 中抽象類別的範例

下面給了以下範例:

Human.java

package com.cont.article;
public abstract class Human
{
public abstract void whatTheylike();
public void doTheysleep()
{
System.out.println("Yes every human require sleep.");
}
}

Human1.java

package com.cont.article;
public class Human1 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have icecream.");
}
}

Human2.java

package com.cont.article;
public class Human2 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have coffee.");
}
}

TestHuman.java

package com.cont.article;
public class TestHuman
{
public static void main(String[] args)
{
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
}
}

輸出:

Java中的抽象類別

在上面的例子中,HUMAN 是一個抽象類,它定義了人類的共同需求、好惡。人有不同的類型,有不同的好惡。所以每個人都可以提供他們喜歡的具體實現。這僅針對他們。

抽象類別的主要優點是我們可以根據需求具體實現方法,減少冗餘,增加程式碼的可讀性,隱藏方法的實現,提供部分抽象。

我們可以再舉一個例子來理解何時使用抽象類別。

  • 我們應該使用抽象類別來與具有特定實作的不同類別共享通用功能。
  • 在抽象類別中,欄位不應該是靜態的和最終的;我們還可以有具體的、私有的、公共的和受保護的方法。

假設我們有一個 Animal 類別。地球上有各種各樣的動物,它們在某些或主要意義上都彼此不同。儘管如此,它將包含所有共同特徵。

現在,這個 Animal 類別不能為每個 Animal 提供特定的方法。所以透過抽象類別的概念,我們就可以實現這個功能,不需要多餘的程式碼。

所有動物都有不同種類的聲音、習慣等。例如狗、貓、大象、零食都有不同的聲音。因此,為此,我們可以在父類別中擁有一個通用方法,所有其他子類別或子類別都可以透過該方法提供其特定的實作。

在父類,即 Animal 中,我們有一個通用的抽象方法,稱為它們的 Sound ()。所以每個子類別都需要重寫這個方法並提供其具體的實作。

抽象類別和介面

以下是抽象類別和介面的差別:

  • 抽象類別和介面都是Java中用來實作抽象的。然而,抽象類別提供部分抽象,而介面提供 100% 或完全抽象。
  • 預設情況下,介面中的變數是最終的。但抽象類別也包含一個非最終變數。同樣,抽象類別也可以有靜態、非靜態變數。但該介面只會包含一個最終的靜態變數。
  • 抽象類別的成員變數可以是私有的、公共的和受保護的,但預設情況下,它們在介面中是公共的。
  • 一個抽象類別可以擴展另一個Java類別並實作多個接口,但一個接口只能擴展另一個接口。同樣,抽象類別可以提供介面的實現,但介面不能這樣做。
  • 我們使用implements和extend關鍵字來實作和擴充介面和類別。
  • 我們可以透過方法修改或存取抽象類別的非靜態和非final變數。

結論

抽象類別用於提供部分抽象。抽象類別不能使用 NEW 關鍵字實例化。抽象方法沒有主體,並且總是以分號 (;) 結尾。抽象類別包含抽象方法和非抽象方法。抽象超類別的子類別需要實作所有抽象方法;如果它沒有提供,那麼它必須將自己聲明為抽象類別。即使超類別是具體的,子類別也可以是抽象的。非抽象類別不能包含抽象方法。此外,抽象方法是非靜態的。因此,抽象類別也有抽象方法和具體方法,因此它們不能提供100%的抽象。這是一個向最終用戶隱藏複雜邏輯並僅向他們顯示服務的過程。

另一方面,即使其超類別是具體的,子類別也可以是抽象的,並且也可以用作資料類型。抽象類別可以具有靜態欄位和靜態方法。您可以將這些靜態成員與類別參考一起使用。

以上是Java中的抽象類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn