728x90
제네릭 타입의 상속과 구현
제네릭 타입도 다른 타입과 마찬가지로 부모 클래스가 될 수 있다.
사용 예시
public class ChildProduct<T, M> extends Product<T, M> {...}
자식 제네릭 타입은 추가적으로 타입 파라미터를 가질 수 있다. 세 가지 타입 파라미터를 가진 자식 제네릭 타입 선언
public class ChildProduct<T, M, C> extends Product<T, M> {...}
제네릭 클래스를 부모로 가질 수 있다.
사용 예제
- 부모 제네릭 클래스
// 부모 제네릭 클래스
public class Product<T, M> {
private T kind;
private M model;
public T getKind() { return this.kind; }
public T getModel() { return this.model; }
public void setKind(T kind) { this.kind = kind; }
public void setMoel(M model) { this.model = model; }
}
class Tv{}
- 자식 제네릭 클래스
// 자식 제네릭 클래스
public class ChildProduct<T, M, C> extends Product<T, M> {
private C company;
public C getCompany() { return this.company; }
public void setCompany(C company) { this.company = company; }
}
제네릭 인터페이스를 구현한 클래스도 제네릭 타입이 될 수 있다.
사용 예제
- 제네릭 인터페이스
// 제네릭 인터페이스
public interface Storage<T> {
public void add(T item, int index);
public T get(int index);
}
// 제네릭 구현 클래스
public class StorageImpl<T> implements Storage<T> {
private T[] array;
public StorageImpl(int capacity) {
this.array = (T[]) (new Object[capacity]);
// 타입 파라미터로 배열을 생성하려면 new T[n]형태로 생성할 수 없고,
//(T[])(new Object[n]) 으로 생성해야한다.
}
@Override
public void add(T item, int index) {
array[index] = item;
}
@Override
public T get(int index) {
return array[index]
}
}
* 타입 파라미터로 배열을 생성하려면 new T[n]형태로 생성할 수 없고, (T[])(new Object[n]) 으로 생성해야한다.
- ChildProduct<T, M, C> 와 StorageImpl<T> 클래스를 사용하는 예제
// 제네릭 타입 사용 클래스
public class ChildProductAndStorageExample {
public static void main(String[] argsa) {
ChildProduct<Tv, String, String> product = new ChildProduct<>();
product.setKind(new Tv());
product.setModel("SmartTV");
product.setCompany("Samsung");
Storage<Tv> storage = new StorageImpl<Tv>(100);
storage.add(new Tv(), 0);
Tv tv = storage.get(0);
}
}
'Languages > Java' 카테고리의 다른 글
[Java] 람다식 (2) 타겟 타입과 함수적 인터페이스 (0) | 2021.12.30 |
---|---|
[Java] 람다식 (1) 람다식 개념과 기본 문법 (0) | 2021.12.30 |
[Java] 제네릭 (3) 제한된 타입 파라미터, 와일드 카드 타입 (0) | 2021.12.28 |
[Java] 제네릭 (2) 멀티 타입 파라미터, 제네릭 메소드 (0) | 2021.12.28 |
[Java] 제네릭 (1) 개념, 제네릭 타입(class<T>, interface<T>) (0) | 2021.12.28 |
댓글