Java面向對象(OOP)概念


。面向對象編程只是一個模式,它提供許多概念,如繼承,數據綁定,多態等等。

Simula是第一種面向對象的編程語言。而一切都可表示為對象的編程模式被稱為真正的面向對象的編程語言。Smalltalk是第一個真正的面向對象的編程語言。

 

1. 面向對象編程

對象表示真實的單詞實體,如:筆,椅子,表等。面向對象編程是一種使用類和對象來設計程序的方法或模式。它通過提供一些概念簡化了軟件開發和維護:

  • 對象
  • 繼承
  • 多態性
  • 抽象
  • 封裝
  • 組合

 

1.1. 對象

任何具有狀態和行為的實體都稱為對象。例如:椅子,鋼筆,桌子,鍵盤,自行車等。它可以是物理和邏輯的。

 

1.2. 類

對象的集合稱為,它是一個邏輯實體。

 

1.3. 繼承

當一個對象獲取父對象的所有屬性和行為時,稱為繼承。它提供代碼可重用性,它用於實現運行時多態性。
繼承是面向對象的編程概念,一個對象基於另一個對象構建。繼承是代碼重用的機制, 被繼承的類稱為超類,繼承超類的類稱為子類。
在java中使用extends關鍵字來實現繼承。下面是java中繼承的一個簡單示例。

class SuperClassA { public void foo(){ System.out.println("SuperClassA"); } } // 繼承 SuperClassA 類 class SubClassB extends SuperClassA{ public void bar(){ System.out.println("SubClassB"); } } public class Test { public static void main(String args[]){ SubClassB a = new SubClassB(); a.foo(); a.bar(); } } 
 

 

1.4. 多態性

當一個任務通過不同的方式執行時,稱為多態性。例如:以不同的方式說服客戶,畫一些東西,如:形狀或矩形等。在java中,使用方法重載和方法重寫來實現多態性。另一個例子是說話,人說人話,貓說話可以是:“喵喵”,而狗說話可能是“旺旺”等,說話時表示和聲音也不太一樣。

參考以下代碼 -

public class Circle { public void draw(){ System.out.println("繪制圓形,默認顏色為黑色,直徑為1厘米。"); } public void draw(int diameter){ System.out.println("繪制圓形,默認顏色為黑色,直徑為 "+diameter+" 厘米。"); } public void draw(int diameter, String color){ System.out.println("繪制圓形,顏色為 "+color+" ,直徑為 "+diameter+" 厘米。"); } } 
 

這里有多種draw()方法,它們都有不同的行為。這是方法重載的一種情況,因為所有方法名稱都相同且參數不同。這里編譯器將能夠識別在編譯時調用的方法,因此這也稱為編譯時多態

當在對象之間具有“IS-A”關系時,實現運行時多態性。這也稱為方法重寫,因為子類必須覆蓋超類方法。

 

如果在超類中,實際的實現類是在運行時決定的。編譯器無法決定將調用哪個類方法。此決定在運行時完成,因此這也叫作運行時多態動態方法分派

 

方法重寫示例

類:Shape.java

public interface Shape { public void draw(); } 
 

類:Circle.java

public class Circle implements Shape{ @Override public void draw(){ System.out.println("繪制圓形"); } } 
 

*類:Square.java*

public class Square implements Shape { @Override public void draw() { System.out.println("繪制長方形"); } } 
 

Shape是超類,它有兩個子類CircleSquare,下面是運行時多態性的示例。

 

類:PolymorphismTest.java

public class PolymorphismTest { public static void main(String args[]){ Shape sh = new Circle(); sh.draw(); Shape sh1 = getShape(); //一些確定形狀的第三方邏輯 sh1.draw(); } } 
 

在上面的示例中,java編譯器不知道在運行時使用的是哪個Shape的實現類,因此運行時多態性。

 

1.5. 抽象

隱藏內部細節和顯示功能稱為抽象。例如:電話,但我們不知道內部是如何處理通話/通信的。

抽象是隱藏內部細節和用簡單的術語描述事物的概念。例如,添加兩個整數的方法。該方法的內部處理對外界是隱藏的。有許多方法可以在面向對象的程序中實現抽象,例如封裝和繼承。

Java程序也是抽象的一個很好的例子。這里java負責將簡單語句轉換為機器語言,並隱藏外部世界的內部實現細節。

 

1.6. 封裝

將代碼和數據綁定(或包裝)在一起成為單個單元稱為封裝。例如:膠囊,它包裹着不同的葯物。

一個java類是封裝的例子。Java bean是完全封裝的類,因為所有的數據成員在這里是私有的。

封裝是用於在面向對象編程中實現抽象的技術。封裝用於對類成員和方法的訪問限制。

訪問修飾符關鍵字用於面向對象編程中的封裝。例如,java中的封裝是使用privateprotectedpublic關鍵字實現的。

 

1.7. 組合

組合是聚合的特例。組合是一種更具限制性的聚合形式。當“HAS-A”關系中包含的對象不能獨立存在時,那就是組合的情況。例如,房子里有房間。沒有房子,這里的房間不可能存在。

 

2. 面向對象編程的優點

  1. OOP使開發和維護變得更容易,因為在面向過程的編程語言中,如果代碼隨着項目規模的增長而增長,則不容易管理。

  2. OOP提供數據隱藏,而在面向過程的編程語言中,可以從任何地方訪問全局數據。

  3. OOP提供更有效地模擬真實世界事件的能力。如果使用面向對象的編程語言,我們可以提供真實世界里的問題的解決方案。

 

 

 

 

完整的Java初級,高級對應的學習路線和資料!專注於java開發。分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源項目,助力開發者成長!


歡迎關注微信公眾號:碼邦主

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM