중급상속

온라인 결제 시스템

Payment 부모 클래스를 상속받아 카드 결제와 계좌이체 결제 클래스를 구현합니다. 다형성의 기본을 이해합니다.

상속메소드 오버라이딩다형성

온라인 결제 시스템

📋 문제 설명

Payment 부모 클래스를 상속받아 카드 결제계좌이체 결제 클래스를 구현하세요.

다양한 결제 방식을 처리하기 위한 상속 구조를 학습합니다.


🎯 클래스 계층 구조

Java
Payment (부모 클래스)
 ├── CardPayment (신용카드 결제)
 └── BankTransferPayment (계좌이체 결제)

💻 코드 구조

Payment 클래스 (부모 클래스)

Java
public class Payment {
    protected String paymentMethod;

    public Payment(String paymentMethod) {
        this.paymentMethod = paymentMethod;
    }

    public void processPayment(double amount) {
        // 결제 방식과 금액 출력
        System.out.println("결제 방식: " + paymentMethod + ", 결제 금액: " + amount + "원");
    }
}

필드

  • protected String paymentMethod - 결제 방식 (예: "카드", "계좌이체")

메서드

  • processPayment(double amount) - 결제 처리 (자식 클래스에서 오버라이드)

CardPayment 클래스 (자식 클래스)

Java
public class CardPayment extends Payment {
    private String cardType;

    public CardPayment(String cardType) {
        // 1. 부모 생성자 호출: super("카드")
        // 2. cardType 초기화
    }

    @Override
    public void processPayment(double amount) {
        // 부모 클래스의 메서드를 오버라이드하여
        // 카드 유형을 포함한 결제 정보를 출력합니다.
        // 예: "결제 방식: 카드, 카드 유형: [cardType], 결제 금액: [amount]원"
    }
}

추가 필드

  • private String cardType - 카드 유형 (예: "신용카드", "체크카드")

오버라이드 메서드

  • processPayment() - 카드 유형 정보를 추가하여 결제 처리

BankTransferPayment 클래스 (자식 클래스)

Java
public class BankTransferPayment extends Payment {
    private String bankName;

    public BankTransferPayment(String bankName) {
        // 1. 부모 생성자 호출: super("계좌이체")
        // 2. bankName 초기화
    }

    @Override
    public void processPayment(double amount) {
        // 부모 클래스의 메서드를 오버라이드하여
        // 은행 이름을 포함한 결제 정보를 출력합니다.
        // 예: "결제 방식: 계좌이체, 은행 이름: [bankName], 결제 금액: [amount]원"
    }
}

추가 필드

  • private String bankName - 은행 이름 (예: "국민은행", "신한은행")

오버라이드 메서드

  • processPayment() - 은행 이름 정보를 추가하여 결제 처리

📝 Main 클래스 테스트

Java
public class Main {
    public static void main(String[] args) {
        // CardPayment 객체 생성
        CardPayment cardPayment = new CardPayment("신용카드");

        // 카드 결제 처리
        System.out.println("=== 카드 결제 ===");
        cardPayment.processPayment(50000);

        System.out.println(); // 빈 줄

        // BankTransferPayment 객체 생성
        BankTransferPayment bankPayment = new BankTransferPayment("국민은행");

        // 계좌이체 결제 처리
        System.out.println("=== 계좌이체 결제 ===");
        bankPayment.processPayment(30000);
    }
}

예상 출력:

Java
=== 카드 결제 ===
결제 방식: 카드, 카드 유형: 신용카드, 결제 금액: 50000원

=== 계좌이체 결제 ===
결제 방식: 계좌이체, 은행 이름: 국민은행, 결제 금액: 30000원

💡 학습 포인트

1. 상속을 통한 코드 재사용

  • 공통 기능(processPayment)은 부모 클래스에 정의
  • 각 결제 방식의 고유한 정보는 자식 클래스에 추가

2. 메서드 오버라이딩

  • 부모의 메서드를 자식 클래스에서 재정의
  • 각 결제 방식에 맞는 정보 출력

3. 다형성의 기초

  • 같은 메서드 이름(processPayment)으로 다른 동작 수행
  • 실제 결제 시스템에서 활용되는 설계 패턴