瀏覽通過域

JAVA中的抽象類和封裝

Java是一種麵向對象語言。它使我們能夠將程序組織成更簡單的邏輯單元,即對象,並提供抽象、封裝、繼承和多態。

OOP是一種通過實現類及其對象來設計程序的方法。

什麼是抽象類?

抽象類是處理程序抽象的類。所以,問題來了什麼是抽象?

概括地說,抽象這就是麵向對象編程的特性顯示"隻有必要的信息和"隱藏”不必要的信息。最重要的抽象的目的是向用戶隱藏不必要的細節。抽象是從更大的數據中選擇對用戶有益和相關的數據池的信息。

在麵向對象編程中,通過抽象,程序員試圖確保隻向用戶提供功能。它的所有實現和其他無關的方麵都被隱藏起來,以減少複雜性並提高程序的效率。

  • 類聲明的類摘要關鍵字被稱為抽象類。
  • 抽象類不能被實例化,也就是說,不能從類中創建對象(實例)。
  • 抽象類允許同時具有抽象和非抽象方法。
  • 如果一個類包含抽象方法,則需要將它聲明為抽象類。
  • 為了使用抽象類,可以這樣做擴展它的子類,並為它的父類中的所有抽象方法提供實現。

在Java中聲明抽象類

在Java中,隻需在類聲明之前添加abstract關鍵字,就可以聲明一個類是抽象的。

下麵是一個Java抽象類的例子:

公共抽象類Person {

這就是在Java中聲明抽象類的方法。

現在,當我們嚐試創建Person類的實例並嚐試編譯它時,Java編譯器將生成一個錯誤,說明抽象類不能實例化。

Person personInstance = new Person();/ /無效

抽象方法

抽象方法隻能由抽象類使用。抽象方法是沒有主體的方法。抽象類可以同時具有抽象方法和規則方法。

在聲明抽象方法時,我們添加摘要關鍵字放在方法聲明的前麵,方法以分號結束(,)

下麵是一個Java抽象方法的例子:

公共抽象類Person {

myJob();

抽象方法沒有主體或實現。隻有方法的簽名會由子類實現。

如果一個類包含一個抽象方法,那麼整個類必須聲明為抽象類。並非抽象類中的所有方法都必須是抽象方法。抽象類可以混合使用抽象方法和非抽象方法。

抽象類的子類必須實現(覆蓋)其對應的抽象超類的所有抽象方法。類的幫助下繼承超類的非抽象方法超級關鍵字。如果需要,還可以重寫它們。

這是一個抽象類的子類“老師”“人”:

公共班級教師延伸人{

公共抽象無效myJob(){

system . out。println(“我的工作是教書。”);

}}

注意子類“Teacher”必須從它的抽象超類“Person”實現抽象方法myJob()。

當一個抽象類的子類不需要實現所有父類的抽象方法,唯一的一次也是一個抽象類的子類。

抽象類的目的

抽象類的主要目的是充當基類,基類由它們的子類擴展,以創建它們的完整實現。

例如,我們有一個超類person,它的方法是myJob(),子類是Teacher, Painter, Singer等。因為每個人的工作對應不同的職業是不一樣的,所以沒有必要在父類中實現這個方法。這是因為每個子類/子類都必須重寫這個方法來給出它的實現細節,比如Teacher類會在這個方法中執行“Teaching”,Painter類會執行“Painting”,等等。

因此,當我們意識到所有Person子類將並且必須重寫這個myJob()方法時,就沒有必要在父類中實現這個方法。因此,使這個方法抽象是一個不錯的選擇。通過使這個方法抽象,我們使得所有子類都必須實現這個方法;否則,我們將遇到編譯錯誤。隻要方法是抽象的,我們就不需要在父類中實現任何方法。

因為Person類有一個抽象方法,所以您隻需要將這個類聲明為抽象的。

每個人必須有一個工作;因此,通過使這個方法抽象,我們強製子類為這個方法提供實現細節。通過這種方式,我們確保了每個人都有工作。

抽象類的例子

//抽象父類公共抽象類Person{//抽象方法公共抽象void myJob();} //擴展Person類的老師類公共類的老師擴展Person{公共抽象void myJob(){System.out. .println(“我的工作是教書。”);}} //畫家類擴展Person類的公共類畫家擴展Person{公共抽象void myJob(){System.out. Person。println(“我的工作是繪畫。”);}}公共靜態無效main(字符串args[]){Person obj;obj = new Teacher();system . out。println(“老師——“+ obj.myJob ());obj = new Painter();system . out。println(“畫家——”+ obj.myJob ()); }

輸出:

老師——我的工作是教書。

畫家——我的工作是繪畫。

因此,對於這類現實場景,我們通常將類聲明為抽象的,然後,具體類擴展這些類並相應地覆蓋方法。他們也可以有自己的方法。

封裝是什麼?

封裝被定義為將類的數據和方法包裝或捆綁到單個單元中。封裝的基本概念是對外部隱藏對象的內部表示。這也被稱為數據隱藏。一般來說,封裝限製外部類訪問和修改類的字段和方法。

Java中的數據隱藏

Java中的數據隱藏定義為對其他類隱藏類的變量的機製。對這些變量的訪問隻能通過相應類的方法授予。除了隱藏實現細節的用戶來說,它還提供了更好的管理和分組相關的數據。

為了在Java中實現較低程度的封裝,我們可以使用像“protected”或“public”這樣的訪問修飾符。

它允許我們修改而不影響其他屬性的代碼的一部分。

如何封裝數據?

如果我們使用最具限製性的訪問修飾符,即private,我們隻能在與屬性或方法相同的類中訪問它。

同一包中的任何其他子類或類都不能訪問“私有”變量或方法。

如果我們想要獲得關於對象當前狀態的信息,我們需要將所有getter和setter方法聲明為public。

在Java中實現封裝的步驟是−

  • 首先,將類的變量聲明為private,這樣其他類或對象就不能訪問它們。
  • 其次,我們需要提供公共setter和getter方法來修改(僅寫)和查看(隻讀)私有變量的值。

封裝的演示:

訪問Employee類變量的程序如下所示:

//封裝演示類Employee{//聲明所有變量為private //這些隻能被// Employee類的公共方法訪問private String empName;私人int empID;私人int empSalary;//設置getter //獲取方法來訪問//私有變量empSalary公共int getSalary(){返回empSalary;} //獲取方法的名稱訪問//私有變量empName公共String getName(){返回empName;} //獲取ID的訪問方法//私有變量empID公共int getID(){返回empID;} //設置員工工資的方法來訪問//私有變量empSalary公共無效setSalary(int newSalary) {empSalary = newSalary;} //設置方法為員工名訪問//私有變量empName公共無效setName(String newName) {empName = newName;} //設置方法為員工ID訪問//私有變量empID公共無效setID(int newID) {empID = newID;}}公共類TestEmployee{公共靜態無效main(String[] args) {Employee obj = new Employee(); // setting values of the variables obj.setName("Sunny"); obj.setSalary(10000); obj.setID(20); // Displaying values of the variables System.out.println("Employee's name: " + obj.getName()); System.out.println("Employee's salary: " + obj.getSalary()); System.out.println("Employee's ID: " + obj.getID()); }} // Direct access of empID is not possible // due to encapsulation // System.out.println("Employee's ID: " + obj.empID);

輸出:

員工的名字:陽光明媚

員工的薪水:10000

員工的ID: 20

還讀:2021年Java麵試問答排行榜前160名

beplay2018官网很好的學習團隊
beplay2018官网偉大學習的博客涵蓋了技術的最新發展和創新,可以用來建立有回報的職業生涯。你會找到職業指南、技術教程和行業新聞,讓自己跟上快速變化的科技和商業世界。

留下你的評論

您的電郵地址將不會公布。

用夢想的工作免費的印度最值得信賴的教育平台上的證書課程

滾動到頂部
Baidu
map