深入理解面向对象编程中的抽象:完整指南与实例解析

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

抽象是什么?

抽象是将应用程序的内部细节隐藏起来,不让外界知道的过程。抽象是用简单的术语描述事物的过程,它用于创建应用程序和客户程序之间的边界。

2. 现实生活中的抽象化

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

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

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

对象是面向对象编程的基本构建块。一个对象包含一些属性和方法。我们可以通过访问修饰符将它们隐藏在外部世界之外。我们可以只为其他程序提供所需的函数和属性的访问权限。这是实现面向对象编程中抽象的一般步骤。

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

有两种抽象的类型。

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

4.1) 数据抽象

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

Data Abstraction

4.2) 过程抽象

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

Process Abstraction

5. Java中的抽象

在Java中,抽象是通过接口和抽象类来实现的。它们用于创建实际实现类的基本实现或契约。Car.java:基本接口或抽象类。

package com.Olivia.oops.abstraction;

public interface Car {

	void turnOnCar();

	void turnOffCar();

	String getCarType();
}

ManualCar.java和AutomaticCar.java是Car的实现类。

package com.Olivia.oops.abstraction;

public class ManualCar implements Car {

	private String carType = "手动挡";
	
	@Override
	public void turnOnCar() {
		System.out.println("启动手动挡汽车");
	}

	@Override
	public void turnOffCar() {
		System.out.println("关闭手动挡汽车");
	}

	@Override
	public String getCarType() {
		return this.carType;
	}
}
package com.Olivia.oops.abstraction;

public class AutomaticCar implements Car {

	private String carType = "自动挡";

	@Override
	public void turnOnCar() {
		System.out.println("启动自动挡汽车");
	}

	@Override
	public void turnOffCar() {
		System.out.println("关闭自动挡汽车");
	}

	@Override
	public String getCarType() {
		return this.carType;
	}
}

用户程序:我们来看一个测试程序,该程序将使用到汽车功能。

package com.Olivia.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());

	}
}

客户端程序只知道汽车和汽车提供的功能。内部实现细节对客户端程序是隐藏的。参考资料:维基百科,Oracle文档。

bannerAds