-
[Java] 제네릭(generic) - 제네릭 타입의 상속과 구현CSE/Java 2015. 9. 20. 11:47
제네릭은 여러 절로 구성되어 있습니다.
제네릭 타입의 상속과 구현
제네릭 타입도 다른 타입과 마찬가지로 부모 클래스가 될 수 있습니다.
다음은 Product<T, M> 제네릭 타입을 상속해서 ChildProduct<T, M> 타입을 정의합니다.
12public class ChildProduct<T, M> extends Product<T, M> { ... }cs 자식 제네릭 타입은 추가적으로 타입 파라미터를 가질 수 있습니다. 다음은 세 가지 타입 파라미터를 가진 자식 제네릭 타입을 선언한 것입니다.
12public class ChildProduct<T, M, C> extends Product<T, M> { ... }cs * Product.java
12345678910111213141516171819202122232425package generic;public class Product<T, M> {private T kind;private M model;public T getKind() {return kind;}public void setKind(T kind) {this.kind = kind;}public M getModel() {return model;}public void setModel(M model) {this.model = model;}}cs * ChildProduct.java
12345678910111213141516package generic;public class ChildProduct<T, M, C> extends Product<T, M> {private C company;public C getCompany() {return company;}public void setCompany(C company) {this.company = company;}}cs 제네릭 인터페이스를 구현한 클래스도 제네릭 타입이 되는데, 다음과 같이 제네릭 인터페이스가 있다고 가정해봅시다.
* Storage.java
123456789package generic;public interface Storage<T> {public void add(T item, int index);public T get(int index);}cs * StorageImpl.java
1234567891011121314151617181920212223import generic.Storage;public class StorageImpl<T> implements Storage<T> {private T[] array;public StorageImpl(int capacity) {this.array = (T[]) (new Object[capacity]);}@Overridepublic void add(T item, int index) {array[index] = item;}@Overridepublic T get(int index) {return array[index];}}cs 다음 예제는 ChildProduct<T, M, C> 와 StorageImpl<T> 클래스의 사용 방법을 보여줍니다.
* ChildProductAndStorageExam.java
1234567891011121314151617181920212223package generic;public class ChildProductAndStorageExam {public static void main(String[] args) {ChildProduct<Tv, String, String> product = new ChildProduct<>();product.setKind(new Tv());product.setModel("Smart TV");product.setCompany("LG");System.out.println(product.getKind().getClass().getName() + ": " + product.getModel() + "-" + product.getCompany());Storage<Tv> storage = new StorageImpl<>(100);storage.add(new Tv(), 0);Tv tv = storage.get(0);}}cs * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.
'CSE > Java' 카테고리의 다른 글
[Java] 람다식 - 클래스 멤버와 로컬 변수 사용 (0) 2015.09.20 [Java] 람다식 - 기본 문법, 타겟 타입과 함수적 인터페이스 (0) 2015.09.20 [Java] 람다식 - Intro (0) 2015.09.20 [Java] 제네릭(generic) - 제한된 타입 파라미터, 와일드카드 타입 (1) 2015.09.20 [Java] 제네릭(generic) - 제네릭 메소드 (0) 2015.09.20 [Java] 제네릭(generic) - 멀티 타입 파라미터 (0) 2015.09.20