Menu
CoddyTech

回顾:支付系统

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 40 课,共 87 课。

challenge icon

挑战

简单

让我们构建一个完整的支付处理系统,把你在本章学到的所有接口知识结合起来。你将创建一个灵活的系统,通过通用接口统一处理不同的支付方式。

你将把代码分布在 5 个文件中:

  • Payable.java:定义所有支付方式都必须实现的核心接口。它应声明一个名为 pay(double amount) 的方法,该方法返回描述支付操作的 String。
  • CreditCard.java:创建一个实现 Payable 的类,用于表示信用卡支付。CreditCard 有一个 cardNumber 字段(String),用于存储末尾 4 位数字。添加一个构造函数来初始化它。pay 方法应返回:Paid [amount] using Credit Card ending in [cardNumber]
  • PayPal.java:再创建一个实现 Payable 的类,用于处理 PayPal 支付。PayPal 账户有一个 email 字段(String)。添加一个构造函数来初始化它。pay 方法应返回:Paid [amount] via PayPal account [email]
  • PaymentProcessor.java:创建一个处理器类,可以处理任何 Payable 对象。它应有一个 processPayment(Payable paymentMethod, double amount) 方法,该方法调用支付方式的 pay 方法并返回结果。这展示了接口如何支持多态行为:处理器不需要知道具体的支付类型!
  • Main.java:把所有内容组合起来。你将接收 3 个输入:卡号(末尾 4 位)、电子邮件地址和支付金额。创建一个 PaymentProcessor,然后用它处理给定金额的 CreditCard 支付和 PayPal 账户支付。将每个结果分别打印在单独一行。

你将接收 3 个输入:卡号末尾的 4 位数字(String)、PayPal 电子邮件(String)和支付金额(double)。

输出时将金额格式化为小数点后两位。注意,借助接口的作用,同一个 PaymentProcessor 可以处理完全不同的支付类型!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        String cardNumber = scanner.nextLine();  // 最后 4 位数字
        String email = scanner.nextLine();       // PayPal 邮箱
        double amount = scanner.nextDouble();    // 支付金额
        
        // TODO: 创建一个 PaymentProcessor
        
        // TODO: 使用 cardNumber 创建一个 CreditCard
        
        // TODO: 使用 email 创建一个 PayPal 账户
        
        // TODO: 使用 CreditCard 处理付款并打印结果
        
        // TODO: 使用 PayPal 处理付款并打印结果
    }
}

面向对象编程中的所有课

自己练习: Java 在线编译器