AnimalMgr<Tiger> m3 = new AnimalMgr<Tiger>(new Tiger(100));
AnimalMgr<Bear> m4 = new AnimalMgr<Bear>(new Bear(200));
System.out.println(m3.data.hp);
-------------------------------------------------------
class AnimalMgr<T>{
public T data;
public AnimalMgr(T data) {
this.data=data;
}
}
제너릭을 쓸경우 다형성을 안썼기때문에 다 불러올수가 있다.
---------------------------------------------------------------
- 제네릭의 제한
-> 해당클래스를 쓸때 클래스를 통해 객체를 만들때 데이터타입을 정하는것이 제네릭이다.
3가지
1. <?> : 제한없음, 모드타입이 가능(T,E)
2. <? extends T> : 상한제한, T와 그 자손들만 가능
3. <? super T> : 하한제한, T와 그 조상들만 가능
-------------------------------
우린 extends까지만 한다.
--------------------------------------------------------------
package kh.java.run;
import kh.java.test.Generic;
public class Run3 {
public static void main(String[] args) {
Test t1=new Test(new Animal());
Test t2 =new Test(new Tiger());
Test t3=new Test(new Bear());
//Tiger은 상속을 받았기 때문에 별문제없이 가능하다.
//Animal은 자기자신 포함이다.
//Animal까진 호환이 된다.
}
}
class Animal{
}
class Tiger extends Animal{
}
class Bear {
}
class Test<T super Animal>{
public T data;
public Test(T data) {
this.data=data;
}
}
//이자리에 올수 있는건 Animal클래스와 이걸 상속한 녀석만 올수있어.
'IT일반과목 > java' 카테고리의 다른 글
쓰레드-2 (0) | 2018.08.05 |
---|---|
쓰레드-1 (0) | 2018.08.05 |
자바 제너릭(Generic)2 (0) | 2018.08.03 |
자바 제너릭(Generic) (0) | 2018.08.03 |
MVC패턴으로 소스 짜보기2 (0) | 2018.08.02 |