profile image

L o a d i n g . . .

다형성

프로그램을 구성하는 객체를 바꾸면 프로그램의 실행 성능이 다르게 나올 수 있다.

객체 사용 방법이 동일하다는 것은 동일한 메소드를 가지고 있다는 뜻이다.

 

  1. 타이어를 한국 타이어와 금호 타이어를 상속하고 있는 상태
  2. 타이어(부모) 메서드를 한국 타이어와 금호 타이어가 오버라이딩 하고 있다면
  3. 타이어 메소드 호출 시 오버라이딩 된 메소드가 호출된다.
  4. 오버라이딩 된 내용은 두 타이어가 다르기 때문에 실행 결과가 다르게 나온다.
  5. 이것이 다형성이다.
다형성을 구현하기 위해서는 자동 타입 변환과 메소드 재정의가 필요하다.

필드 다형성

필드의 타입과 그 타입에 의해 제공되는 메서드는 동일하게 사용되지만, 필드에 실제로 대입되는 객체가 달라져서 실행 결과가 다양하게 나올 수 있는 것

 

interface PaymentMethod {
    void pay(int amount);
}

class CreditCard implements PaymentMethod {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using Credit Card.");
    }
}

class PayPal implements PaymentMethod {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using PayPal.");
    }
}

class BankTransfer implements PaymentMethod {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using Bank Transfer.");
    }
}

class Customer {
    private PaymentMethod paymentMethod;  // Field Polymorphism

    // Setter for the payment method
    public void setPaymentMethod(PaymentMethod paymentMethod) {
        this.paymentMethod = paymentMethod;
    }

    // Method to process payment
    public void makePayment(int amount) {
        paymentMethod.pay(amount);
    }
}

public class Main {
    public static void main(String[] args) {
        Customer customer = new Customer();

        // Assign a CreditCard to the paymentMethod field
        customer.setPaymentMethod(new CreditCard());
        customer.makePayment(100);  // Output: Paid 100 using Credit Card.

        // Assign a PayPal to the paymentMethod field
        customer.setPaymentMethod(new PayPal());
        customer.makePayment(200);  // Output: Paid 200 using PayPal.

        // Assign a BankTransfer to the paymentMethod field
        customer.setPaymentMethod(new BankTransfer());
        customer.makePayment(300);  // Output: Paid 300 using Bank Transfer.
    }
}

 


추상 클래스 (abstract)

객체를 생성할 수 있는 클래스: 실체 클래스

실체 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스: 추상 클래스

추상 클래스는 실체 클래스의 부모 역할을 함 -> 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메소드를 물려 받음

추상 클래스는 new 연산자를 이용해서 객체를 지겁 만들지 못하고, 상속을 통해 자식 클래스로만 만들 수 있음

자식 객체가 생성될 때 super()로 추상 클래스의 생성자가 호출되기 때문에 생성자도 반드시 있어야 함


출처

1. 이것이 자바다 

복사했습니다!