[JAVA] 자바 - 제네릭 상속 관계 (ex. Number - Integer)
by mini_min[JAVA]
자바 - 제네릭 상속 관계
✔️ 제네릭 상속 (매개변수 관계)
제네릭에서 타입 매개변수에 상속관계가 성립한다. (어떤 타입 매개변수를 가진 제네릭 클래스에서는 상속관계가 성립안된다.)
💡 제네릭 클래스를 상속 받는 하위 클래스는 상위 클래스의 파라미터 타입을 기술해야하며, 추가 타입 파라미터를 가질 수 있다. (인터페이스도 마찬가지)
class Test7{
public <U extends Number> void disp(U u) {
System.out.println(u.getClass().getName() + ", " + u);
}
}
💡 <U extends Number>
제너릭은 메소드도 만들 수 있는데, 위에서 <U extends Number> 의 뜻은 Number 클래스를 상속하는, 즉 '자식'이 될 수 있는 클래스의 매개변수가 아니면 해당 메소드를 사용할 수 없다는 뜻이다.
ex) Integer 는 Number 클래스의 자식(=상속관계) 이므로 t.disp(30); 으로 호출 가능하다.
◾ 상속 (Number 클래스, Integer 클래스)
class Test1<T>{
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
public static void main(String[] args) {
Test1<Number> t1 = new Test1<>();
Integer i = 30;
t1.set(i);
Number n = t1.get();
//30 출력
💡 Integer 클래스는 Number 클래스를 상속받는다. 따라서 타입 매개변수의 상속 관계 성립!
t1.set(30); 메소드 실행가능하다.
//Integer i2 = t1.get(); //컴오류. get 넘버이다.
Integer i2 = (Integer)t1.get(); //다운캐스팅 해야함.
💡 get() 메소드는 Integer 클래스의 상위 클래스인 Number 클래스의 메소드니까 다운 캐스팅 해줘야함.
✔️ 제네릭 클래스의 상속관계X
어떤 타입 매개변수를 가진 제네릭 클래스의 상속관계는 성립하지 않는다.
가령, t2 가 Test1<Integer> 제네릭 클래스일 때, Test1<Number> 제네릭 클래스인 t3 와 상속 관계가 될 수 없다.
Test1<Number> t3 = t2;
//컴파일 오류. 제너릭은 상속관계가 될 수 없다.
💡 Number와 Integer 클래스는 상속 관계지만, 제네릭 클래스 끼리 상속관계를 가질 수 없다.
'Java' 카테고리의 다른 글
[JAVA] 자바 - LinkedList<E> 클래스/Stack 클래스 (0) | 2022.07.29 |
---|---|
[JAVA] 자바 - Vector<E> 클래스 (0) | 2022.07.29 |
[JAVA] 자바 - 제네릭 클래스/인터페이스 & 제네릭 배열 (generics) (0) | 2022.07.28 |
[JAVA] 자바 - ArrayList (배열을 리스트로 변환/리스트를 배열로 변환) (0) | 2022.07.28 |
[JAVA] 자바 - 컬렉션(Collection) 개념과 List 인터페이스 (0) | 2022.07.28 |
블로그의 정보
개발자 미니민의 개발로그
mini_min