Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

제너릭의 종류 2.3) 와일드 카드 <? super T> 본문

JAVA/Basic

제너릭의 종류 2.3) 와일드 카드 <? super T>

붓그린 2017. 6. 20. 15:10
<? super T>
- 상속관계에 존재하는 클래스만 자료형으로 받고 싶은 경우

- T : 자식클래스로 고정으로 지정해주고 자식클래스와 연관이 있는 부모클래스는 전부 적용이 된다(매개변수로 허용)



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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package j0620.super2;
// <? super T> : 상속관계에 존재하는 클래스만 자료형으로 받고 싶은 경우
// T : 자식클래스로 고정으로 지정해주고 자식클래스와 연관이 있는 부모클래스는 전부 적용이 된다(매개변수로 허용) 
import java.util.*;
 
 
class Person{ 
    String name;
    // 부모 클래스에 소스코드를 추가(생성자 오버로딩)
    Person(){};
    Person(String name){
        this.name=name;
    }
    
    public String toString() {
        return name;
    }
 
 
// Man
class Man extends Person{ // T(Man) 자식클래스
    // String name; 
    Man(String name){
        this.name=name; // m.name="임시"
    }
    @Override // 객체의 주소값을 출력시키는 메소드(Object)
    public String toString() {
        // TODO Auto-generated method stub
        return name;
    }
}
 
// Woman
class Woman extends Person{ // T(Woman) 자식클래스
    // String name; 
    Woman(String name){
        this.name=name;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return name;
    }
}
 
 
 
 
public class WildSuper {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        // Man
        List<Man> list=new ArrayList();
        // Man m=new Man("임시");
        list.add(new Man("임시")); //축약형
        list.add(new Man("테스트"));
        //printData(list); //상속관계가 아님
        
        // Woman
        List<Woman> list2=new ArrayList();
        list2.add(new Woman("임시2")); 
        list2.add(new Woman("테스트2"));
        printData(list2);
        
        // Person
        List<Person> list3=new ArrayList();
        list3.add(new Person("사장님")); 
        list3.add(new Person("이사님"));
        printData(list3);
        
        // Double
        List<Double> list4=new ArrayList();
        list4.add(12.5); list4.add(22.5); list4.add(14.3);
        //printData(list4);    // 허용되는 자료형이 아님    
        
    }
 
    
    // <? super T> 메소드
        public static void printData(List <super Woman> list) { 
            // Woman과 부모인 Person의 데이터만 허용
            for(Object obj:list) // 어떤 자료형이든 받아야하기에 Object형 
                System.out.println(obj);
        }
    
 
}
 
cs


Comments