原文: https://javatutorial.net/java-abstraction-example

此示例演示了 Java 编程语言中抽象的用法

什么是抽象

抽象是向用户隐藏实现细节的过程。 只有功能将提供给用户。 在 Java 中,使用抽象类和接口来实现抽象。 我们对 Java 接口有更详细的说明,如果您需要有关接口的更多信息,请首先阅读本教程

抽象是面向对象编程(OOP)背后的四个主要概念之一。 OOP 问题在求职面试中很常见,因此您可能会在下次 Java 求职面试中遇到有关抽象的问题。

Java 抽象示例

举一个抽象的例子,我们将创建一个名为Employee的超类和两个子类 - ContractorFullTimeEmployee。 这两个子类都有共同的属性可以共享,例如雇员的姓名和每小时将支付给该人的金额。 承包商和全职员工之间的主要区别是 - 他们在公司工作的时间。 全职员工每天持续工作 8 个小时,承包商的工作时间可能会有所不同。

Java 抽象示例 - 图1

Java 抽象类示例

首先创建超类Employee。 注意在类定义中abstract关键字的用法。 这将类标记为抽象,这意味着它不能直接实例化。 我们将称为calculateSalary()的方法定义为抽象方法。 这样,您可以将此方法的实现留给Employee类的继承者。

  1. package net.javatutorial;
  2. public abstract class Employee {
  3. private String name;
  4. private int paymentPerHour;
  5. public Employee(String name, int paymentPerHour) {
  6. this.name = name;
  7. this.paymentPerHour = paymentPerHour;
  8. }
  9. public abstract int calculateSalary();
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public int getPaymentPerHour() {
  17. return paymentPerHour;
  18. }
  19. public void setPaymentPerHour(int paymentPerHour) {
  20. this.paymentPerHour = paymentPerHour;
  21. }
  22. }

Contractor类继承了其父级Employee的所有属性,但必须提供其自己的calculateSalary()方法的实现。 在这种情况下,我们将每小时的付款额乘以给定的工作时间。

  1. package net.javatutorial;
  2. public class Contractor extends Employee {
  3. private int workingHours;
  4. public Contractor(String name, int paymentPerHour, int workingHours) {
  5. super(name, paymentPerHour);
  6. this.workingHours = workingHours;
  7. }
  8. @Override
  9. public int calculateSalary() {
  10. return getPaymentPerHour() * workingHours;
  11. }
  12. }

FullTimeEmployee也有自己的calculateSalary()方法实现。 在这种情况下,我们只需乘以恒定的 8 小时即可。

  1. package net.javatutorial;
  2. public class FullTimeEmployee extends Employee {
  3. public FullTimeEmployee(String name, int paymentPerHour) {
  4. super(name, paymentPerHour);
  5. }
  6. @Override
  7. public int calculateSalary() {
  8. return getPaymentPerHour() * 8;
  9. }
  10. }