,面向物件編程只是一個模式,它提供許多概念,如繼承,資料系結,多型等等,
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是超類,它有兩個子類Circle和Square,下面是運行時多型性的示例,
類: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中的封裝是使用private,protected和public關鍵字實作的,
1.7. 組合
組合是聚合的特例,組合是一種更具限制性的聚合形式,當“HAS-A”關系中包含的物件不能獨立存在時,那就是組合的情況,例如,房子里有房間,沒有房子,這里的房間不可能存在,
2. 面向物件編程的優點
-
OOP使開發和維護變得更容易,因為在面向程序的編程語言中,如果代碼隨著專案規模的增長而增長,則不容易管理,
-
OOP提供資料隱藏,而在面向程序的編程語言中,可以從任何地方訪問全域資料,
-
OOP提供更有效地模擬真實世界事件的能力,如果使用面向物件的編程語言,我們可以提供真實世界里的問題的解決方案,

完整的Java初級,高級對應的學習路線和資料!專注于java開發,分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源專案,助力開發者成長!
歡迎關注微信公眾號:碼邦主

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/214877.html
標籤:Java
上一篇:JS逆向學習筆記 - 持續更新中
