package CHAPTER09;

import java.util.ArrayList;
import java.util.List;

// 과일 클래스: Fruit
class Fruit {
    public void eat() {
        System.out.println("Eating a fruit");
    }
}

// 사과 클래스: Apple
class Apple extends Fruit {
    @Override
    public void eat() {
        System.out.println("Eating an apple");
    }
}

public class C9_08_GenericsPolymorphism {
	
    // 하한 제한 와일드카드를 사용한 메서드
    public static void eatFruits(List<? super Apple> fruits) {
        // 리스트에 Apple 객체 추가
        fruits.add(new Apple());
        
        // 리스트 요소 순회 및 eat 메서드 호출
        for (Object fruit : fruits) {
            if (fruit instanceof Fruit) {
                ((Fruit) fruit).eat();
            }
        }
    }
    public static void main(String[] args) {
        // Fruit 타입의 리스트 생성
        List<Fruit> fruits = new ArrayList<>();
        
        // eatFruits 메서드 호출
        eatFruits(fruits); // 출력: Eating an apple
    }
}
