物件導向程式設計的三大特性為何?

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;
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們