이것이 자바다로 공부중입니다.

제네릭 클래스중 제한된 타입 파라미터 부분 공부중인데 이해안되는 부분이 있어서 질문드립니다.


class A

{

int intA;

}


class G extends A

{

int intG;


}


class H

{

static int Gfunc(T t1)

{

t1.intA; // 불가능?

t1.intG; // 가능?


}

}

이러한 제네렉 메소드가 있을때 이 메소드는 현재 제한된 타입 파라미터를 가집니다.

T 는 A를 상속하는 클래스이거나 A 클래스이어야하죠.

여기까지는 이해가 잘됐씁니다.


근데 책에서 메소드의 중괄호 { } 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)로 제한된다. 하위타입에만 있는

필드와 메소드는 사용할 수 없다. 라고 나와있습니다.

이부분이 이해가 잘안가는데 하위타입에만 있는 필드와 메소드는 왜 사용할 수 없다는 건지 잘 이해가 가질 않네요

T가 A를 상속하면 A 멤버 뿐만아니라 T의 멤버도 사용이 가능해야할텐데 왜 불가능한거죠?


위 예제에서 A클래스를 상속하는 G클래스가 있고 제네렉 메소드를 가지고 있는 H클래스가 있습니다.

H에서 intA를 호출하려고하는데 안되는게 혹시나 T의 타입이 정해지지 않았기 때문인건가요?


그냥 약속인건가요? 이해가 잘안갑니다 도와주세여