LLD Hub
Problems·Polymorphism: Payment System
OOPL1 · Easy

Polymorphism: Payment System

Problem

Design a payment system where Cash, CreditCard, and UPI all implement the same Payment interface but behave differently. A Checkout class should process any payment without knowing which type it is — that's runtime polymorphism.

Requirements

  • Payment interface with: pay(amount), refund(amount), getPaymentType()
  • CashPayment: no refund (returns cash physically), pay() just records
  • CreditCardPayment: pay() charges card, refund() reverses charge, has card details
  • UPIPayment: pay() sends UPI request, refund() initiates reversal, has VPA
  • Checkout.processPayment(Payment p, amount) — works with any Payment
  • Checkout.refundPayment(Payment p, amount) — same interface

Constraints

  • Checkout must NOT use instanceof or type-checking
  • Adding a new payment method (e.g. Wallet) should NOT require changes to Checkout
✓ Saved