物件導向程式設計的三大特性為何?
2023年3月3日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
什麼是物件導向程式設計?
物件導向程式設計(Object Oriented Programming)是一種程式設計方法論,它將軟體系統中的事物(稱為物件)視為具有狀態和行為的實體,並將它們組織成一個相互作用的系統。這種程式設計方法著重於封裝、繼承和多型等概念,使得程式碼可以更加模組化、易於維護和擴展。物件導向程式設計已成為現代軟體開發的主要範式之一,被廣泛應用於許多領域,包括桌面應用程式、網路應用程式、手機應用程式、遊戲開發等。
三大特性
物件導向程式設計的三大特性是封裝、繼承和多型。它們的定義如下,並且以汽車類別來當作範例:
封裝(Encapsulation)
將物件的狀態和行為封裝在一個單元中,並且只對外部提供有限的接口來訪問物件,從而保護物件的內部狀態不被直接訪問或修改。
public class Car {
private String make;
private String model;
private int year;
public Car(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
public void drive() {
System.out.println("The " + this.make + " " + this.model + " is now being driven");
}
}
繼承(Inheritance)
通過建立一個新物件,讓其繼承一個或多個已有物件的屬性和方法,從而使得新物件可以重複使用已有物件的程式碼,同時也可以擴展或修改已有物件的功能
多型(Polymorphism)
讓物件可以根據上下文表現出不同的行為,即一個物件可以被當作多個不同的物件使用,從而提高程式的靈活性和可擴展性。多型通常可以通過多載(Overloading)和複寫(Overriding)來實現。
public class SportsCar extends Car {
public SportsCar(String make, String model, int year) {
super(make, model, year);
}
@Override
public void drive() {
System.out.println("The " + this.make + " " + this.model + " is now being driven fast");
}
public void drive(int speed) {
System.out.println("The " + this.make + " " + this.model + " is now being driven at " + speed + " mph");
}
}
- 多載(Overloading):
SportsCar
子類別中定義了另一個drive
方法,但這次我們添加了一個額外的speed
參數。這就是方法重載的體現。當我們調用帶有speed
參數的drive
方法時,Java 會自動識別我們調用的是哪一個方法,並且根據參數的個數和類型來決定使用哪一個方法。 - 複寫(Overriding):
SportsCar
繼承了Car
父類別,並且重寫了父類別中的drive
方法。在SportsCar
子類別中的drive
方法上,使用了@Override
注解,這就是方法重寫的體現。當我們創建SportsCar
類的對象時,調用的就是子類別中的drive
方法,而不是父類別中的 drive 方法。
最後來測試看看結果:
int main() {
Car myCar("Toyota", "Camry", 2021);
myCar.drive(); // Output: The Toyota Camry is now being driven
SportsCar mySportsCar("Porsche", "911", 2021);
mySportsCar.drive(); // Output: The Porsche 911 is now being driven fast
mySportsCar.drive(120); // Output: The Porsche 911 is now being driven at 120 mph
return 0;
}