Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Binary Tree
- 코테
- Math
- Matrix
- SQL
- Stack
- simulation
- 자바
- Counting
- array
- database
- Class
- Number Theory
- 코딩테스트
- geometry
- string
- 파이썬
- 구현
- sorting
- hash table
- Tree
- two pointers
- implement
- dynamic programming
- java
- Method
- bit manipulation
- Data Structure
- Binary Search
- greedy
Archives
- Today
- Total
코린이의 소소한 공부노트
지네릭스와 다형성 본문
class Product {} // 부모
class Tv extends Product {} // 자식1
class Audio extends Product {} // 자식2
3가지 부모-자식 클래스들을 이용해서 지네릭스에 다형성이 어떤 식으로 적용되는지 살펴보려 한다.
1. 참조변수와 생성자에 대입된 타입은 무조건 일치해야 한다.
ArrayList<Product> productList = new ArrayList<Product>();// OK
ArrayList<Tv> tvList = new ArrayList<Tv>(); // OK
ArrayList<Product> tvList = new ArrayList<Tv>(); // 에러. 부모 자손 관계여도 지네릭 타입이 다르면 에러
2. 지네릭 클래스 간의 다형성은 성립한다. 대입된 타입은 같아야 한다.
List<Tv> tvList = new ArrayList<Tv>(); // OK. ArrayList가 List를 구현
List<Tv> tvList = new LinkedList<Tv>(); // OK. LinkedList가 List를 구현
3. 매개변수의 다형성도 성립한다.
productList.add(new Tv()); // OK. public boolean add(Product o)
productList.add(new Audio()); // OK. public boolean add(Product o)
tvList.add(new Tv()); // OK. public boolean add(Tv o)
Tv t1 = tvList.get(0); // OK
Tv t2 = (Tv)productList.get(0); // public Product get(int index)
// 조상 객체가 자손에 선언될 때는 형변환이 필요
4. 메서드의 매개변수로 지네릭스가 쓰인 경우 지네릭 타입이 똑같아야 호출이 가능하다.
public static void printAll(ArrayList<Product> list) {
for(Product p : list)
System.out.println(p);
}
// main()
printAll(productList); // OK.
printAll(tvList); // 컴파일 에러. 지네릭 타입이 일치하지 않기 때문에 printAll() 호출 불가
'Java' 카테고리의 다른 글
와일드카드 ?와 지네릭 메서드 (0) | 2022.11.14 |
---|---|
지네릭 클래스의 예시와 제한 (0) | 2022.11.14 |
지네릭스 (0) | 2022.11.09 |
Collections 클래스 (0) | 2022.11.08 |
HashMap, Hashtable 클래스 (0) | 2022.11.08 |