제네릭은 어떤 클래스를 만들 때 타입이 정해져 있지 않아서 오브젝트로 하면 다운 캐스팅이라는 불편함이 있으니까 제네릭을 사용해서 묶어라는 문법이다.
와일드카드
와일드카드 ->? -> 몰라!
retrun타입이 ? 일 때는 어떤 타입을 리턴할지 모른다라고 하는 것이다.
그럼 이 몰라는 무슨 뜻이냐면 <? extends Object>라는 듯으로? 는 "모든 클래스"라는 뜻이다.
자 다음과 같은 상황에 가방에서 공을 꺼낼 때 어떨 때는 축구공타입을 어떨때는 농구공 타입을 꺼내고 싶은 상황이 생길 수 도있다. 하지만 위 코드에서처럼 return타입이 축구공이기 때문에 농구공타입을 return 할 때 오류가 나는 것이다.
이럴 때 "?"를 사용하면 아주 편하게 작업할 수 있다.
하지만 여기서 문제가 있다. 와일드카드로 하면 Object타입이 되기 때문에 추상적인 것에 타입을 묶으면 된다.
추상적인것에 타입을 묶어서 일치시킨 다음 오버라이드로 getName을 무효화시켜서 동적 바인딩이 됐기 때문에 충 구공이 잘 담겼다.