-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJava201_User.java
More file actions
72 lines (57 loc) · 1.89 KB
/
Copy pathJava201_User.java
File metadata and controls
72 lines (57 loc) · 1.89 KB
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
package java0913_collection;
/*
* 1. 와일드카드(?)를 제공하는 이유
* : 컬렉션에 저장되는 요소들이 특정한 객체로 정해진 상태에서 다른 객체형은 저장할 수 없는 상태 였다. 하지만 때로는 기존과 같이 모든 객체들을 저장해야 할 때가 있다.
* 2. 와일드 카드의 구성
* <?> : 모든 객체자료형에 대한 배치를 의미한다.
* <? super 객체자료형> : 명시된 객체자료형이나 객체자료형의 상위 객체들의 배치를 의미한다.
* <? extends 객체자료형> : 명시된 객체자료형이나 객체자료형으로 부터 상속받은 하위 객체들의 배치를 의미한다.
*/
class Seoul {
public void showYou() {
System.out.println("seoul");
}
}
class Fruit extends Seoul {
public void showYou() {
System.out.println("fruit");
}
}
class Apple extends Fruit {
@Override
public void showYou() {
System.out.println("apple");
}
}
class Orange extends Fruit {
@Override
public void showYou() {
System.out.println("orange");
}
}
class FruitBox<T> {
T item;
public void store(T item) {
this.item = item;
}
public T pullout() {
return item;
}
}
public class Java201_User {
public static void main(String[] args) {
FruitBox<Apple> fApple = new FruitBox<Apple>();
fApple.store(new Apple());
openAndFruitBox(fApple);
FruitBox<Seoul> fSeoul = new FruitBox<Seoul>();
fSeoul.store(new Seoul());
// openAndFruitBox(fSeoul); // Fruit 클래스를 상속받지 않아서 사용할 수 없다.
openAndSeoul(fSeoul);
}
public static void openAndFruitBox(FruitBox<? extends Fruit> param) { // Fruit과 Fruit을 상속받은 자손 객체만 사용할 수 있따.
param.pullout().showYou();
}
public static void openAndSeoul(FruitBox<? super Seoul> param) { // Seoul이나 Seoul 상위의 부모객체만 사용할 수 있다.
((Seoul) param.pullout()).showYou();
}
}