제네릭 타입의 부모클래스를 상속할 경우 자식 클래스 또한 제네릭 타입이어야 한다.
부모클래스에 기술된 타입 파라미터는 자식클래스에도 기술해야 한다.
public class ChildProduct<T,M> extends Product<T,M> { ... }
또한 자식 클래스는 추가적인 타입 파라미터를 가질 수 있다.
public class ChildProduct<T,M,C> extends Product<T,M> { ... }
제네릭 타입 인터페이스를 구현하는 구현객체일 경우 구현클래스도 제네릭 타입이어야 한다.
인터페이스에 기술된 타입파라미터가 구현클래스에도 기술되어야 한다.
public class StorageImpl<T> implements Storage<T> { ... }
즉, 제네릭 타입의 클래스를 상속하려면 자식 클래스도 제네릭 , 타입 파라미터도 그대로 기술 + 추가기술 가능
제네릭 타입의 인터페이스를 구현하려면 구현클래스도 제네릭, 타입 파라미터도 그대로 기술
이라고 할 수 있다.
예제>>
제네릭 타입 부모클래스 (Product)
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;
}
}
class Tv { }
Product클래스를 상속받는 자식 클래스(ChildProduct)
public class ChildProduct<K,V,C> extends Product<K,V>{
private C company;
public C getCompany() {
return company;
}
public void setCompany(C company) {
this.company = company;
}
}
제네릭 타입의 인터페이스(Storage)
public interface Storage<T> {
public void add(T item, int index);
public T get(int index);
}
--> 인터페이스는 "객체 사용설명서" 라고 할 수 있다. 그러므로 자체적으로 객체를 만들 수 없음!
객체를 만들 때에 필요한 안내만 되어 있을 뿐! 따라서 메소드의 구현부를 기술하지 않는 추상메소드만 가진다!
구현객체(StorageImpl)
public class StorageImpl<T> implements Storage<T> {
private T[] array;
//생성자
public StorageImpl(int capacity) {
array = (T[])(new Object[capacity]);
}
//인터페이스에 있는 함수 재정의
@Override
public void add(T item, int index) {
array[index] = item;
}
@Override
public T get(int index) {
return array[index];
}
}
--> 인터페이스에 정의되어 있는 추상메소드를 필히 재정의 해준다!
실행클래스(ChildProductAndStroageExample)
public class ChildProductAndStroageExample {
public static void main(String[] args) {
ChildProduct<Tv,String,String> product = new ChildProduct<>();
product.setKind(new Tv());
product.setModel("SmartTV");
product.setCompany("Samsung");
StorageImpl<Tv> storage = new StorageImpl<>(100);
storage.add(new Tv(), 0);
Tv tv = storage.get(0);
}
}
본 포스팅은 이것은 자바다 책을 참고하여 작성하였습니다.
'Java 공부' 카테고리의 다른 글
13장 제네릭(Generic)(8)_확인문제 (0) | 2019.05.27 |
---|---|
13장 제네릭(Generic)(7)_정리 (0) | 2019.05.26 |
13장 제네릭(Generic)(5)_와일드 카드 타입 (0) | 2019.05.24 |
13장 제네릭(Generic)(4)_제한된 타입 파라미터 (0) | 2019.05.23 |
13장 제네릭(Generic) (3)_제네릭 메소드 (0) | 2019.05.22 |