物件导向程序设计的三大特性为何?

2023年3月3日

💎 加入 E+ 成長計畫 與超過 300+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

什么是物件导向程序设计?

物件导向程序设计(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 上追蹤我們