자녀 객체를 인터페이스 타입으로 형 변환 + abstract 선언 이유?

2024. 5. 27. 10:20카테고리 없음

부모를 상속받은 자녀가 인터페이스를 구현하였다면, 
자녀 객체를 인터페이스 타입으로 형 변환하여 인터페이스의 메서드를 사용할 수 있다

// 모든 객체에 인센티브 100씩 지급하고 다시 HashMap에 넣는다
System.out.println();
// map에 저장된 값들을 반환 값들의 타입인 Employee
for (Employee e : map.values()) { 
	// 반복되는 Employee가 Bonus 인터페이스를 구현하고 있는지 확인 -> Employee의 자녀가 인터페이스를 구현
    if (e instanceof Bonus) { 
    	// e(Employee)가 Bouns(인터페이스) 구현하고 있다면 캐스팅하여 메서드(incentive)를 사용 
        ((Bonus) e).incentive(100); 
    }
}

 

 

궁금증 : Employee 클래스가 public abstract class Employee 선언된 이유는?


이 클래스 자체가 불완전하거나 직접 인스턴스화되지 않도록 하기 위함입니다
비록 Employee 클래스에 추상 메서드가 없더라도, 다음과 같은 이유로 추상 클래스로 선언할 수 있습니다

1. 불완전한 클래스
- 구체적인 동작(예: 세금 계산 방식)은 하위 클래스에서 정의
2. 인스턴스화 방지
- 속받는 구체적인 하위 클래스만 인스턴스화되도록 하기 위함
3. 상속을 통한 확장성
코드의 재사용성과 확장성