Java 中的物件導向概念 – 物件導向概念示例

面向物件的程式設計概念對於程式設計非常重要。如果沒有對面向物件的程式設計概念有所了解,你將無法在面向物件的程式設計模型中設計系統。

什麼是面向物件的程式設計模型?

面向物件的程式設計模型圍繞著物件的概念。 什麼是物件? 物件是類別的一個實例。它包含屬性和函式。它們就像現實世界中的物件。例如,你的汽車、房子、筆記型電腦等都是物件。它們具有一些特定的屬性和方法來執行某些操作。 什麼是類別? 類別定義了物件的藍圖。它們定義了物件的屬性和功能。例如,筆記型電腦是一個類別,而你的筆記型電腦是它的一個實例。

面向物件的程式設計概念

核心面向物件的程式設計概念包括:

  1. 抽象化
  2. 封裝
  3. 多型
  4. 繼承
  5. 關聯
  6. 聚合
  7. 組合

讓我們逐一研究這些面向對象編程概念。我們將使用Java編程語言作為代碼示例,這樣你就知道如何在Java中實現面向對象編程的概念。

1. 抽象

抽象是隱藏內部細節並用簡單的術語描述事物的概念。例如,一個添加兩個整數的方法。該方法的內部處理對外部世界是隱藏的。在面向對象編程中,有許多實現抽象的方法,如封裝和繼承。Java程序也是抽象的一個很好的例子。在這裡,Java負責將簡單的語句轉換為機器語言,並將內部實現細節對外部世界隱藏起來。

進一步閱讀:面向對象編程中的抽象是什麼?

2. 封裝

封裝是物件導向程式設計中實現抽象的技術。封裝用於限制對類成員和方法的訪問。在物件導向程式設計中,使用存取修飾符關鍵字來實現封裝。例如,在Java中,可以使用privateprotectedpublic關鍵字來實現封裝。

3. 多型性

多型性是一個概念,即物件在不同情況下表現出不同的行為。有兩種多型性 – 編譯時多型性和運行時多型性。編譯時多型性是通過方法重載來實現的。例如,我們可以有一個如下的類。

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}

這裡有多個draw方法,但它們具有不同的行為。這是一種方法重載的情況,因為所有方法的名稱相同,但參數不同。在編譯時,編譯器將能夠識別要調用的方法,因此這被稱為編譯時多態性。運行時多態性是在對象之間存在“IS-A”關係時實現的。這也被稱為方法重寫,因為子類必須重寫超類方法以實現運行時多態性。如果我們是根據超類進行工作,實際的實現類在運行時被決定。編譯器無法決定將調用哪個類的方法。這個決定是在運行時進行的,因此被稱為運行時多態性或動態方法調度。

package com.journaldev.test;

public interface Shape {

	public void draw();
}
package com.journaldev.test;

public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}
package com.journaldev.test;

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}

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

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();

在上面的例子中,Java編譯器不知道在運行時將使用Shape的實際實現類,因此是運行時多態性。

4. 繼承

繼承是物件導向編程的概念,其中一個物件是基於另一個物件的。繼承是代碼重用的機制。被繼承的物件稱為超級類別,而繼承超級類別的物件稱為子類別。我們在Java中使用extends關鍵字來實現繼承。以下是Java中繼承的一個簡單示例。

package com.journaldev.java.examples1;

class SuperClassA {

	public void foo(){
		System.out.println("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();
	}
}

5. 關聯

關聯是物件導向編程的概念,用於定義物件之間的關係。關聯定義了物件之間的多重性。例如,教師和學生物件。教師和學生之間存在一對多的關係。同樣,學生可以與教師物件之間存在一對多的關係。然而,學生和教師物件都是彼此獨立的。

集成

聚合是一種特殊類型的關聯。在聚合中,物件具有自己的生命周期,但存在所有權關係。每當物件之間存在“具有”關係和所有權時,這就是聚合的情況。

6. 組合

組合是聚合的一種特殊情況。組合是聚合的一種更嚴格的形式。當“具有”關係中的包含對象無法單獨存在時,這就是一種組合情況。例如,房子具有房間。在這裡,房間不能沒有房子存在。組合被認為比繼承更好,詳細了解請參閱組合 vs 繼承

進一步閱讀:Java 中的組合

這就是對面向對象編程概念的快速總結。

您可以從我們的GitHub 存儲庫查看更多 Java 示例程序。

參考資料:https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example