Java 中的多態性:概念、類型、特徵和示例

已發表: 2022-04-18

Javascript 是最流行和廣泛使用的面向對象編程語言之一,與 C#、PHP、Python、C++ 等一樣。它使用戶能夠通過編程展示和解決現實生活中的概念,因為一切都表示為一個對象。 Java 作為一種編程語言的特性提供了多種途徑,通過使代碼更加動態和易於維護來簡化軟件開發。

在本文中,我們將探討 Java 作為一種面向對象的編程語言,並理解繼承、抽象、多態和數據封裝的概念。 我們還將研究 Java 中的多態類型及其優缺點。

目錄

面向對象編程概述

面向對象編程 (OOP) 語言是指那些在編碼中使用實時“對象”概念的計算機語言。 它旨在通過編程實現繼承、多態、循環、數據抽像等世俗實體。

程序員需要熟悉一些面向對象編程的基本概念。 這些概念術語對於學習 OOP 的特殊和獨特特性(如封裝、多態性等)是必要的。

1.類

“類”表示適用於類中所有指定“對象”的一組屬性和方法。 對象可以是不同的類型,例如整數、數組或字符串等。類就像用戶定義的原型,可以使用它創建不同的“對象”。

2. 對象

對像是 OOP 語言最基本的單位,代表現實生活中的真實數據。 對象具有調用它們的類的屬性。

3.方法

方法是一組涉及不同功能的語句,這些功能組合在一起以執行特定任務。 它在完成用戶定義的指令後返回輸出。 它還可以執行沒有輸出的任務。 方法允許程序員在不重新鍵入代碼的情況下重用代碼。 Java 要求所有方法都屬於一個類,這與 C++、C 或 Python 等語言不同。

面向對象的概念

面向對象編程有四個主要原則——Java 展示了所有這些屬性:

1. 抽象

數據抽像是 OOP 語言的一個屬性,它展示了必要的細節,同時保持對象的其他不相關細節對用戶不可見,例如實現代碼。 此功能僅顯示基本和相關的詳細信息,這有助於開發人員快速對類的功能進行適當的更改。

2.封裝

數據封裝是指將數據封裝在單元內。 OOP 語言的這一特性保護封裝的數據不受其他函數和方法的影響。 它將代碼和指定的方法綁定在一起,以單個單元執行操作,從而防止它們被外部方法操作或訪問。 這也稱為數據隱藏。

3. 繼承

繼承是 OOP 語言的另一個重要特性,它允許一個類從其他類繼承屬性。 它基於代碼可重用性的概念,從而減少了重複重新鍵入類特徵的需要。 從另一個類繼承的類稱為子類,被繼承的類稱為超類。

4. 多態性

多態性允許對象採取多種形式並執行相似的任務或在不同的方法中表現出相似的行為。

Java中的多態性

多態性允許以各種方式執行單個任務。 它是一種有助於識別和區分相似代碼實體的屬性,從而提高 OOP 語言的效率。

在 Java 中,通過將對象聲明為單獨的實體來展示多態性。 以這種方式,可以以多種方式執行相同的動作。 多態性與繼承一起被激活,使對象能夠使用不同類的繼承屬性執行不同的任務。 方法或對象名稱的不同區分了兩個實體。

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

多態性的特徵

1. 強制

數據類型的隱式轉換以防止編譯期間的類型錯誤是強制的。 它不包括顯式數據類型轉換,而僅遵循 Java 允許的轉換層次結構。 例如,如果操作數是浮點數且運算符是整數,則結果將是浮點數。

2. 多態參數/變量

在執行期間可以保存各種類型值的對像或變量稱為多態變量或參數。 它規定在聲明一個類時,相同的變量名可以保存不同的數據類型,相同的方法名可以保存不同的參數和返回類型。

3.內部運算符重載

運算符重載使用用戶需要的運算符符號。 Java 支持內部運算符重載。 它也是靜態多態性的一個例子。

Java中的多態類型

在 Java 中,可以使用以下方式調用多態性:

1.方法重載

方法重載是創建多個具有相同名稱並屬於同一類的對像或方法的過程。 它在一個類中起作用。

2.方法覆蓋

方法覆蓋是子類如何構成與超類中聲明的方法相同的方法。 它跨類起作用。 如果子類包含超類中已經存在的相同方法,則子類中的函數將被覆蓋。

Java中的子類型多態性

亞型多態性取決於向上轉型和後期綁定。

  • 向上轉型是一個過程,通過該過程,對像或方法可以通過將數據類型(浮點數、整數等)從子類型提升到超類型,方法是將其向上移動到繼承層次結構中。
  • 後期綁定用於調用非最終實例的方法。

沒有操作員參與其中,因為子類型本身是超類型的成員。 例如,如果一個類被命名為顏色,它的子類型可以是紅色、藍色、橙色、綠色等。子類型多態性包括子類型以展示超類型的屬性。 但是,失去了對每個子類型的各個屬性的訪問權。

Java 中的運行時多態性

在 Java 中,運行時多態性也稱為動態方法分派或動態綁定。 它是通過方法覆蓋來實現的——調用一個被覆蓋的方法以在運行時提供動態解析。 它可以通過函數而不是對象來實現。

下面是一個 Java 運行時多態的例子:

類車{

無效運行(){System.out.println(“駕駛”);}

}

大眾汽車類擴展汽車{

void run(){System.out.println(“安全行駛 90 公里”);}

公共靜態無效主要(字符串參數[]){

Car c = new Volkswagen();//向上轉型

b.運行();

}

}

輸出

90公里安全駕駛

Java中的編譯時多態性

編譯時多態性是通過方法重載來實現的。 這是在編譯期間執行和解決對重載方法的調用的過程。 它也被稱為靜態多態性。 Java 足夠靈活,允許用戶使用具有相同名稱的方法或對象,只要其聲明和簽名屬性保持不同即可。

下面是一個 Java 編譯時多態性的例子:

類 SimpleCalc

{

整數添加(整數 x,整數 y)

{

返回 x+y;

}

整數加法(整數 x,整數 y,整數 z)

{

返回 x+y+z;

}

}

公開課Demo

{

公共靜態無效主(字符串參數 [])

{

SimpleCalc obj = new SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

輸出

50

90

多態性的重要性

多態性使編寫可以構成具有相同名稱的不同類型實體的方法成為可能。 多態性在 Java 中是必不可少的,因為它具有各種使用優勢以及它為使代碼動態化提供的範圍:

  1. 它允許代碼的可重用性——相同的代碼不需要多次編寫。
  2. 它允許一個變量表現出多種行為——具有相同名稱但不同的屬性可以為保持代碼的一致性開闢空間。
  3. 減少大量代碼——它有助於調試,同時也縮短了編譯時間,節省了用戶的內存、能源和時間。

實現多態的可能問題

多態性的使用和實現可能會讓人困惑。 它降低了代碼的可讀性,因此構成了多個錯誤和錯誤的威脅。 它還會根據需要產生執行功能的問題。

有一個經典問題需要注意:脆弱基類問題。 它指的是繼承類的不正確組裝和編碼,導致方法顯示出不可預測的結果。

結論

儘管所有其他標準仍然滿足,但繼承的脆弱性可能導致功能失調和損壞的代碼。 這個基本的架構問題被認為是脆弱的基類問題。 通過加入 upGrad 的軟件開發執行 PG 計劃 - 全棧開發專業化,了解有關 Java 如何展示 OOP 概念的更多信息 獲得行業專家的指導,並通過與同行進行動手協作項目來積累實用知識。

今天就預訂座位!

什麼是靜態綁定和動態綁定?

在編譯時確定的對象稱為靜態綁定。 另一方面,對象的動態綁定類型是在運行時確定的。 前者在方法重載期間使用,後者在方法覆蓋期間使用。

方法覆蓋和方法重載之間的兩個根本區別是什麼?

在 Java 中,方法覆蓋不會覆蓋靜態、私有和最終方法,而方法重載會重載 Java 中的靜態、私有和最終方法。 此外,將主題方法重寫為動態綁定,另一方面,重載方法通過靜態綁定。

Java中的多態性和繼承有什麼區別?

在Java中,多態和繼承有幾個不同點:

1. 繼承是編碼中真實世界父子關係的一種表示。 但是多態性是一種催化劑,它利用這種關係使程序更加動態。
2. 繼承允許通過從父類繼承子類的代碼來重用代碼。 相反,多態性允許子類在父類中重新定義其現有行為。