this question에 대해 Java는 모호한 오버로드 된 생성자 중에서 선택하려고 할 때 "가장 구체적인"옵션을 선택합니다. 이 예에서 :Java : 오버로드 된 생성자 간 선택
public class Test{
private Test(Map map){
System.out.println("Map");
}
private Test(Object o){
System.out.println("Object");
}
public static void main(String[] args){
new Test(null);
}
}
는
는 그러나, 나는 "가장 구체적인"의미 정확히 파악하는 것을 시도했다
을 "지도"인쇄됩니다. 나는 "최소한의 가능한 유형을 나타낼 수 있습니다."에서처럼 "모호하지 않은"것을 의미한다고 가정했습니다. 이 문맥에서 Object
은 원시가 아닌 것이고 Map
은 Map
또는 ? extends Map
일 수 있습니다. 기본적으로 상속 트리의 잎에 더 가까운 클래스가 선택 될 것이라고 생각했습니다.
public class Test{
private Test(A a){
System.out.println("A");
}
private Test(B b){
System.out.println("B");
}
public static void main(String[] args){
new Test(null);
}
}
class A{}
class B extends A{}
"B"그럼
나는이 함께했다 : 하나 개의 클래스가 다른 서브 클래스 인 경우 그 작동
public class Test{
private Test(A a){
System.out.println("A");
}
private Test(E e){
System.out.println("E");
}
public static void main(String[] args){
new Test(null);
}
}
class A{}
class B extends A{}
class C{}
class D extends C{}
class E extends D{}
나는 그것이 인쇄해야합니다 생각
E
인 경우 E
은 알려진 유형 중 하나만 참조 할 수 있지만 A
은 두 가지를 참조 할 수 있습니다 (A
및 B
). 그러나 모호한 참조 오류가 발생합니다.
실제로 생성자를 선택하는 방법은 무엇입니까? 나는 the docs을 읽었지만 솔직히 나는 그것이 어떻게 특이성을 결정 하는지를 따라갈 수 없었다. 내가 왜 E
이 A
보다 더 구체적인지를 결정할 수없는 이유에 대한 설명을 기대하고 있습니다.
아무 것도 할 수 없습니다. ***? 문자열을 확장 ***, 문자열 클래스는 최종 –
@ ΦXocę 웃어 Пepeúpa ツ 좋은 지적. 나는 그것을 고치겠다. – ewok