物件导向程序设计的三大特性为何?
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;
}