抽象是面向对象编程的核心概念之一。抽象定义了创建应用组件的模型。抽象的实现取决于语言特定的特性和流程。
1. 什么是抽象?
抽象是将应用程序的内部细节隐藏起来,不让外部世界知道的过程。抽象用简单的术语来描述事物。它用于在应用程序和客户端程序之间创建边界。
2. 现实生活中的抽象
几乎所有现实生活中的机器都存在抽象。
- 你的汽车就是一个很好的抽象示例。你可以通过转动钥匙或按下启动按钮来启动汽车。你不需要知道引擎是如何启动的,你的汽车有哪些组件。汽车的内部实现和复杂逻辑对用户完全隐藏。
- 我们可以用微波炉加热食物。我们按下一些按钮来设置定时器和食物类型。最后,我们得到了一顿热腾腾、美味可口的饭菜。微波炉的内部细节对我们来说是隐藏的。我们只被赋予了以非常简单的方式使用功能的权限。
3. 物件導向程式設計中的抽象
物件是物件導向程式設計的基本單位。一個物件包含一些屬性和方法。我們可以透過訪問修飾符來隱藏它們,只為其他程式提供所需的功能和屬性的訪問權限。這是實現物件導向程式設計中的抽象的一般過程。
4. 不同類型的抽象有哪些?
有兩種類型的抽象。
- 資料抽象
- 程序抽象
4.1) 資料抽象
當物件數據對外部世界不可見時,它創建了資料抽象。如有需要,透過一些方法提供對物件數據的訪問權限。

4.2) 程序抽象
我們不需要提供關於物件所有功能的細節。當我們隱藏使用者操作中涉及的不同功能的內部實現時,它創建了流程抽象。

5. Java中的抽象
Java中的抽象是通過介面和抽象類來實現的。它們用於為實際實現類創建基礎實現或合同。Car.java: 基礎介面或抽象類
package com.journaldev.oops.abstraction;
public interface Car {
void turnOnCar();
void turnOffCar();
String getCarType();
}
ManualCar.java, AutomaticCar.java: Car的實現類。
package com.journaldev.oops.abstraction;
public class ManualCar implements Car {
private String carType = "Manual";
@Override
public void turnOnCar() {
System.out.println("turn on the manual car");
}
@Override
public void turnOffCar() {
System.out.println("turn off the manual car");
}
@Override
public String getCarType() {
return this.carType;
}
}
package com.journaldev.oops.abstraction;
public class AutomaticCar implements Car {
private String carType = "Automatic";
@Override
public void turnOnCar() {
System.out.println("turn on the automatic car");
}
@Override
public void turnOffCar() {
System.out.println("turn off the automatic car");
}
@Override
public String getCarType() {
return this.carType;
}
}
用戶程式: 讓我們看一個測試程式,其中將使用Car功能。
package com.journaldev.oops.abstraction;
public class CarTest {
public static void main(String[] args) {
Car car1 = new ManualCar();
Car car2 = new AutomaticCar();
car1.turnOnCar();
car1.turnOffCar();
System.out.println(car1.getCarType());
car2.turnOnCar();
car2.turnOffCar();
System.out.println(car2.getCarType());
}
}
Source:
https://www.digitalocean.com/community/tutorials/what-is-abstraction-in-oops