2014-04-16 2 views
0

인터뷰에서이 질문을 받았습니다.Java 오버로드

누구나 설명 할 수 있습니다.

public class A{ 

    public void show(List <String>list1,List<Integer>lists2){...} 

    public void show(List <Integer>list1,List<String>lists2){...} 
} 
public class B{ 
public static void main(..){ 
    A a=new A(); 
    List<String> list1; 
    List<Integer>lists2; 
    a.show(list1,lists2); 
    } 
    } 

나는 2 개의 함수가 호출 될 것이라고 말했지만 .. 내가 neatbeans에서 worte했을 때 같은 이름 함수의 오류가 발생했습니다 ... ??? 왜 여기에 사용되는 오버로딩 개념이 is ???

+0

코드가 컴파일되지 않습니다. 둘 다'show' 메소드는 똑같은 삭제 기능을 가지고 있습니다. –

답변

1

Java Generics는 컴파일 할 때 적용되지만 컬렉션 유형이 지워지고 남은 것은 중복 된 방법입니다. IDE에서 "같은 유형의 삭제"에 대한 메시지를 받게됩니다.

여기에 대한 좋은 논의가 나는 즐겼다입니다 :

http://mindprod.com/jgloss/generics.html

6

type erasure으로 인해 메서드의 인수는 List이됩니다.

public void show(List list1, List list2); 
public void show(List list1, List list2); 

따라서 잘못된 코드가됩니다.

0

첫째, (실제로는 클래스 A에서) 클래스 선언 중 하나에서 "공개"제거합니다.

두 번째로 컴파일러는 매개 변수를 show(list, list)으로 읽으므로 동일한 방법을 제공하므로 여기에서 오버로드가 발생하지 않습니다. 두 매개 변수는 모두 show(list, list)입니다.

제네릭은 반환 형식이 아닌 개체 형식을 구별하는 데 사용됩니다.

희망 사항.