다형성
프로그램을 구성하는 객체를 바꾸면 프로그램의 실행 성능이 다르게 나올 수 있다.
객체 사용 방법이 동일하다는 것은 동일한 메소드를 가지고 있다는 뜻이다.
- 타이어를 한국 타이어와 금호 타이어를 상속하고 있는 상태
- 타이어(부모) 메서드를 한국 타이어와 금호 타이어가 오버라이딩 하고 있다면
- 타이어 메소드 호출 시 오버라이딩 된 메소드가 호출된다.
- 오버라이딩 된 내용은 두 타이어가 다르기 때문에 실행 결과가 다르게 나온다.
- 이것이 다형성이다.
다형성을 구현하기 위해서는 자동 타입 변환과 메소드 재정의가 필요하다.
필드 다형성
필드의 타입과 그 타입에 의해 제공되는 메서드는 동일하게 사용되지만, 필드에 실제로 대입되는 객체가 달라져서 실행 결과가 다양하게 나올 수 있는 것
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. 이것이 자바다
'TIL > Java' 카테고리의 다른 글
[Java] Forward, Redirect 의 차이 (0) | 2024.09.28 |
---|---|
[TIL/Java] 객체 동등 비교 equals() (0) | 2024.08.21 |
[TIL/Java] 학생 수 입력받고 점수 등록하기 (if-else을 switch문으로 리팩토링) (0) | 2024.08.13 |
[TIL/Java] 배열 항목에서 최대값 출력하기 (for문 이용) (0) | 2024.08.12 |
[TIL/Java] 컴파일러란? (0) | 2024.08.07 |