如何在 Java 中實現數據抽象?

已發表: 2022-05-17

抽象、多態、封裝和繼承是面向對象編程的四個基本要素。 其中之一,數據抽象,將在下一篇文章中詳細討論。 我們還將學習如何在 Java 中執行數據抽象。

目錄

什麼是數據抽象?

數據抽像是僅向用戶顯示最重要的細節的特徵。 用戶不知道瑣碎或非必要的細節。 例如,汽車被視為一個整體,而不是其不同的部分。 在丟棄無關信息的同時僅識別項目所需屬性的做法稱為數據抽象。

簡單來說,數據抽象向用戶顯示重要項目,同時隱藏無關緊要的元素。

我們使用關鍵字“abstract”在類和接口的幫助下實現抽象。 我們可以在抽像類中同時擁有抽象方法和具體方法。

什麼是抽像類?

在面向對象編程中,抽像類是聲明一個或多個抽象方法的類。 抽像類和常規 Java 類之間的唯一區別是抽像類包含 abstract 關鍵字,而常規 Java 類不包含。 對於抽像類的聲明,我們在其類名之前使用 abstract 關鍵字。 類中可以有抽象方法和具體方法。 但是,抽象方法不能出現在常規類中。 具有至少一個抽象方法的類稱為抽像類。

它的語法是:

公共抽像類 Name_of_Class

{

公共抽象 Name_of_Method();

}

實現抽像類的一個例子是:

//抽像類命名

抽像類 DemoClass

{

//抽象方法命名

抽象無效 disp();

}

//繼續抽像類

公共類 MainClass 擴展了 DemoClass

{

//定義抽像類的方法體

無效顯示()

{

System.out.println(“已調用抽象方法。”);

}

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

{

MainClass obj = new MainClass ();

//調用抽象方法

obj.display();

}

}

逐點列出:

  • 如果一個類至少有一個抽象方法,則必須將其定義為抽像類。
  • 已聲明為抽象的類無法實例化。
  • 您必須從另一個類繼承一個抽像類並為其抽象方法提供實現以使用它。
  • 如果繼承抽像類,則必須為抽像類中的所有抽象方法提供實現。

什麼是抽象方法?

抽象方法只有方法聲明,沒有實現。 抽象方法可以用沒有自己的主體的方法來表示。 抽象方法必須僅在抽像類中聲明。

如果您希望一個類有一個方法,但該方法的實際實現由子類確定,請將該方法指定為父類中的抽象。

面向對象編程中數據抽象的優勢

  • 在面向對象編程中,抽象降低了程序設計的複雜性及其在軟件上的實現過程。
  • 在 Java 編程中實現抽象的最大優勢在於,用戶可以輕鬆地根據相似性(例如兄弟)組織類,因此數據的繼承和數據的遷移變得容易和可行。
  • 繼承是可能的。 例如:

/* 文件名:DemoAbstract.java */

公共類 DemoAbstract {

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

/* 以下內容無法寫入並引發錯誤 */

員工 e = 新員工(“彼得 D.”,“康涅狄格州哈特福德”,35);

System.out.println(“\n使用Employee引用並調用MailCheck--”);

電子郵件檢查();

}

}

這顯示以下錯誤:

Employee.java:46:Employee 是抽象的; 無法實例化

員工 e = 新員工(“彼得 D.”,“康涅狄格州哈特福德”,35);

^

1 個錯誤

所以我們使用抽像類的用法為:

/* 文件名:employee.java */

公共抽像類員工{

私人字符串 N;

私人字符串添加;

私人整數;

公共僱員(字符串 N,字符串添加,整數){

System.out.println(“構造一個僱員”);

這個.name = N;

this.address = 添加;

this.number = 數字;

}

公共雙計算支付(){

System.out.println(“內部員工compute_pay”);

返回 0.0;

}

公共無效郵件檢查(){

System.out.println(“郵寄支票到” + this.name + ” ” + this.address);

}

公共字符串 toString() {

返回 N + ” ” + 添加 + ” ” + N ;

}

公共字符串 getName() {

返回 N;

}

公共字符串 getAddress() {

返回添加;

}

公共無效setAddress(字符串新地址){

添加 = 新地址;

}

公共 int getNumber() {

返回號碼;

}

}

我們什麼時候使用抽像類或抽象方法?

當我們考慮“形狀”的一般示例時,我們可以想像它被用於參考計算機輔助設計系統或視頻遊戲模擬。 這裡提到的基本類型是“形狀”,每個形狀都有自己的顏色屬性、大小等。特定的形狀類——圓形、正方形、三角形等,都是從這個派生(繼承)的,每一個可能具有額外的獨特屬性和行為。 例如,某些形狀可以是對稱的,而​​另一些則不是。 形狀之間的相似之處和不同之處都體現在類型層次結構中。

因此,形狀可以類比為抽像類,而不同類型的形狀可以表示為具體類。

這是一個解釋抽像類的真實場景:

// 演示抽象的Java程序

抽像類形狀 {

字符串顏色;

抽象雙區域();

公共抽象字符串 toString();

// 抽像類可以有構造函數

公共形狀(字符串顏色)

{

System.out.println(“調用形狀構造函數”);

this.color = 顏色;

}

// 這是一個具體的方法

public String getColour() { 返回顏色; }

}

類圓形擴展形狀{

雙 r;

公共圈(字符串顏色,雙(r)

{

// 調用 Shape 構造函數

超級(顏色);

System.out.println(“調用循環構造函數”);

這個.r = r;

}

@Override 雙區域()

{

返回 Math.PI * Math.pow(r, 2);

}

@Override public String toString()

{

return “圓圈顏色是” + super.getColor()

+ “和麵積是:” + area();

}

}

類矩形擴展形狀{

雙倍長度;

雙倍寬度;

公共矩形(字符串顏色,雙倍長度,

雙倍寬度)

{

// 調用 Shape 構造函數

超級(顏色);

System.out.println(“調用矩形構造函數”);

this.length = 長度;

this.width = 寬度;

}

@Override double area() { 返回長度 * 寬度; }

@Override public String toString()

{

返回“矩形顏色為” + super.getcolor()

+ “和麵積是:” + area();

}

}

公共類測試{

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

{

形狀 s1 = new Circle(“紅色”, 2.2);

形狀 s2 = new Rectangle(“黃色”, 2, 4);

System.out.println(s1.toString());

System.out.println(s2.toString());

}

}

這段代碼是這裡的代碼的修改版本

使用 Java 中的數據抽象的程序的代碼片段:

// Java 中的抽象

抽像類 ElecBill

{

//抽象方法

抽象浮動 compBill();

}

Comm 類擴展了 ElecBill

{

浮動 compBill() {

返回 1.00*100;

}

}

國內類擴展了 ElecBill

{

浮動 compBill() {

返回 0.50*75;

}

}

結論

數據抽像是面向對象編程的一個重要方面。 對於像 Java 這樣的語言,抽象和其他 OOP 概念(如繼承、封裝和多態)在編寫高效程序方面起著至關重要的作用。

如果您想深入學習 OOP 並獲得一流的編程技能,我們建議您參加 upGrad 的軟件工程與工作相關的 PG 認證,該認證旨在幫助學生獲得 Java、OODAP、DSA、HTML5、CSS3 技能、JavaScript、MERN、AWS、SQL 和 NoSQL 數據庫、Spring Boot 等。為期 5 個月的課程涵蓋兩個專業——MERN 堆棧專業化和雲原生專業化,並提供 upGrad 360° 職業諮詢課程的訪問權限。

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

什麼是多態性? 它與數據抽像有何不同?

多態性是一種概括,類似於數據抽象,但它發生在運行時。 如果有一種機制可以訪問一組不同的對像類型,在這些對像類型中它們彼此無法區分,那麼它們就是多態的。 因此,即使它們不相同,但其中的所有對像都具有相同的外觀和感覺。 目標是大幅減少編碼。 您可以編寫一個通用解決方案,而不是為每種單獨的類型編寫所有眾多排列。

封裝和數據抽像有什麼區別?

ENCAPSULATION - 1. 封裝隱藏數據(信息),而抽象隱藏細節(隱藏實現)。 2. 面向對象編程的抽象解決了設計層面的問題。 3. 出於安全目的,封裝意味著隱藏對像如何執行某事的內部信息或機制。 抽象 - 1. 雖然封裝將數據和對其進行操作的方法綁定在一起,但數據抽象關注的是暴露用戶界面,同時模糊實現細節。 2、通過封裝在實現層面解決。 3. 在 Java 中,數據抽象使您可以專注於信息對象必須包含的內容。

接口和抽像類的區別是什麼?

接口 - 1. 只有抽象方法發現自己是接口的一部分。 2. 支持多重繼承。 3. 無法提供抽像類的實現。 4. 接口中只允許使用公共抽象方法。 5、接口中只能使用一個public static final變量。 抽像類 - 1. 抽像以及非抽象方法都可以在抽像類中找到。 2. 不支持多重繼承。 3、能夠實現接口。 4. 受保護的和抽象的公共方法在抽像類中都是可能的。 5. 使用任何訪問說明符,抽像類都可以有 final、static 或 static final 變量。