面向对象编程中的抽象是什么?

抽象是面向对象编程的核心概念之一。抽象定义了创建应用程序组件的模型。抽象的实现取决于语言特定的特性和过程。

1. 什么是抽象?

抽象是将应用程序的内部细节隐藏在外部世界中的过程。抽象用于以简单的术语描述事物。它用于在应用程序和客户程序之间创建边界。

2. 现实生活中的抽象

抽象存在于几乎所有现实生活中的机器中。

  • 您的汽车是抽象的一个很好的例子。您可以通过转动钥匙或按下启动按钮来启动汽车。您不需要知道引擎是如何启动的,您的汽车有哪些组件。汽车的内部实现和复杂逻辑对用户完全隐藏。
  • 我们可以在微波炉中加热食物。我们按下一些按钮来设置定时器和食物类型。最后,我们得到了一顿热乎且美味的餐点。微波炉的内部细节对我们隐藏起来。我们以一种非常简单的方式获得了功能的访问。

3. 面向对象编程中的抽象

对象是面向对象编程的构建块。一个对象包含一些属性和方法。我们可以通过访问修饰符从外部世界隐藏它们。我们可以仅为其他程序提供所需功能和属性的访问。这是在OOPS中实现抽象的通用程序。

4. 抽象有哪些不同类型?

抽象有两种类型。

  1. 数据抽象
  2. 过程抽象

4.1) 数据抽象

当对象数据对外界不可见时,它创造了数据抽象。如果需要,可以通过一些方法访问对象的数据。

Data Abstraction

4.2) 过程抽象

我们不需要提供对象所有功能的详细信息。当我们隐藏用户操作中涉及的不同函数的内部实现时,就会创建过程抽象。

Process Abstraction

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());

	}

}

客户端程序只知道Car及其提供的功能。内部实现细节对客户端程序隐藏起来。参考:维基百科Oracle文档

Source:
https://www.digitalocean.com/community/tutorials/what-is-abstraction-in-oops