2010-06-17 5 views
0

를 explaination 메소드가 호출되고 그 내부에서 올바른 복제 메소드가 호출됩니다. 하지만 내 질문은 때 다리 방법으로 return clone()라고하는 방법입니다 VM은 Point clone() 자체가 아니라 다시 호출해야한다고 말하는가?브리지 방법

+0

이 코드는 컴파일되지 않습니다. –

+0

죄송합니다.이 코드가 디 컴파일 된 코드입니다. 다시 질문을 편집했습니다. – xdevel2000

+1

디 컴파일러가 불완전합니다. 'javap -c -private Point'의 결과를 보면 의미가 있습니다. –

답변

1

이 코드는 Java 1.6과 함께 컴파일되지 않습니다. Java의 메소드 서명에는 리턴 유형이 포함되지 않으므로 중복 메소드 서명을 가질 수 없습니다.

+0

예, 미안 Java 디 컴파일 된 코드를 참조했습니다 ... – xdevel2000

1

동일한 이름과 동일한 매개 변수 (이 경우는 없음)가있는 두 개의 메서드가 있으므로 컴파일되지 않으며 somePoint.clone()을 호출하면 어느 것이 의미하는지 분명하지 않습니다.

public Point clone() { 
    return (Point) super.clone(); // shallow copy 
} 

편집 : 약간의 미세한 점 :

은 당신이 그런 짓을하는 거 야 귀하의 클래스는 예외를 줄 것이다) Cloneable 인터페이스를 달리 super.clone에을 (구현할 예정이다. Object 클래스의 clone() 메서드는 현재 객체의 단순 복사본을 반환합니다 (런타임 클래스는 복제 메서드가 호출 된 객체의 런타임 클래스와 동일합니다). 그런 다음 다른 객체에 대한 참조 복제와 같이 해당 객체에 대한 클래스 특정 조작을 수행 한 다음 반환하는 것은 사용자의 작업입니다. 반환 유형은 Object가 아닌 자신의 클래스 일 수 있으며 Object.clone() (또는 다른 ParentClass.clone()) 메서드를 여전히 덮어 씁니다.

+0

죄송합니다 원한다면 다시 읽어보십시오 ... 감사합니다 – xdevel2000

관련 문제