충분히 쌓여가는
지네릭스 용어, 지네릭 타입과 다형성 본문
지네릭스 용어
Box<T> | 지네릭 클래스, T의 Box 또는 T Box라고 읽는다 |
T | 타입 변수 또는 타입 매개변수(T는 타입 문자) |
Box | 원시 타입(raw type) |
지네릭 타입과 다형성
class Product {}
class Tv extends Product {}
class Audio extends Product {}
참조 변수와 생성자의 대입된 타입은 일치해야 한다
ArrayList<Tv> list = new ArrayList<Tv>(); // OK, 일치
ArrayList<Product> list = new ArrayList<Tv>(); // 에러, 불일치
지네릭 클래스간의 다형성은 성립(여전히 대입된 타입은 일치해야한다)
List<Tv> list = new ArrayList<Tv>(); // OK, 다형성. ArrayList가 List 구현
List<Tv> list = new LinkedList<Tv>(); // OK, 다형성. LinkedList가 List 구현
매개변수의 다형성도 성립
ArrayList<Product> list = newArrayList<Product>();
list.add(new Product());
list.add(new Tv()); // OK
list.add(new Audio()); // OK
코드
import java.util.*;
class Product {}
class Tv extends Product {}
class Audio extends Product {}
class GenericesPolymorphismTest {
public static void main(String[] args) {
ArrayList<Product> productList = new ArrayList<Product>();
ArrayList<Tv> tvList = new ArrayList<Tv>();
// ArrayList<Product> tvList = new ArrayList<Tv>(); // 에러.
// List<Tv> tvList = new ArrayList<Tv>(); // OK. 다형성
productList.add(new Tv()); // public boolean add(Product e)
productList.add(new Audio());
tvList.add(new Tv()); // public boolean add(Tv e)
tvList.add(new Tv());
// tvList.add(new Audio()); // 에러 Tv나 Tv의 자손만 가능
printAll(productList);
// printAll(tvList); // 컴파일 에러가 발생한다.
}
public static void printAll(ArrayList<Product> list) {
for (Product p : list)
System.out.println(p);
}
}
Tv@27f674d
Audio@1d251891
'Java > JAVA3' 카테고리의 다른 글
지네릭 메서드 (0) | 2023.07.28 |
---|---|
와일드 카드 <?>, 지네릭 메서드 (0) | 2023.07.28 |
제한된 지네릭 클래스, 지네릭스의 제약 (0) | 2023.07.27 |
타입 변수 (0) | 2023.07.25 |
지네릭스 Generices (0) | 2023.07.25 |