2012-05-06 2 views
4

의 메소드를 오버라이드 (override) 할 수 없습니다때문에이 코드는 컴파일되지 않는 이름 충돌

import java.util.List; 

class A { 
    void foo(List l) { } 
} 

class B extends A { 
    void foo(List<?> l) { } 
} 

그러나, 다음과 같은 코드를 컴파일 (D에서 푸 C에서 foo는 무시). 왜? 목록 <> 목록에서 유래하지만, 첫 번째 예제는 컴파일되지 않는 이유가 아닌 다른 방법으로하는 주위에 있기 때문에

class C { 
    void foo(List<?> l) { } 
} 

class D extends C { 
    void foo(List l) { } 
} 
+0

질문을 쉽게 대답 할 수 있도록 컴파일 오류를 게시하십시오. –

+0

OK 메시지는 다음과 같습니다. B의 name clash foo (java.util.List )와 A의 foo (java.util.List)는 동일한 삭제 기능을 갖지만 다른 버전은 모두 무시하지 않습니다. – Gmacar

답변

2

두 번째 예는 컴파일합니다.

+0

더 짧은 단어에서 맞습니다. – Justin

+1

일반적으로 사실이 아닙니다. String은 Object를 확장하지만 다른 방법은 아닙니다. 그러나 첫 번째 예제는 컴파일됩니다. – Gmacar

+0

@Gmacar - 두 예제에서 String 또는 Object라는 단어가 표시되지 않습니다. –