2017-04-04 1 views
2

편집 : 개체를 복제해야 할 때이 문제가 발생하고 검색했지만 문제가 해결되지 않았습니다.Java : 복제 전에 유형 캐스트?

Java에서 프로토 타입 패턴을 학습 할 때 일부 자습서를 따라 가면서 (Bike)super.clone()의 형식 변환에 대해 혼란스러워합니다.

먼저 수행되는 작업은 무엇입니까? (Bike)super 또는 super.clone()? 왜 (Bike)이 필요한가요?

public interface Prototype extends Cloneable 
{ 
    public Prototype clone() throws CloneNotSupportedException; 
} 

public class Bike implements Prototype 
{ 
    // Constructor and other methods... 

    // My question is here 
    public Prototype clone() throws CloneNotSupportedException { 
     return (Bike)super.clone(); 
    } 
} 
+1

가능한 [Java casting order] 복제본 (http://stackoverflow.com/questions/5762270/java- casting-order) – Tom

답변

2

는 캐스트는 우선 순위가 낮습니다 : 당신이 Object

+0

'(Foo)'와'a' 사이에 공백을 발견했기 때문에 나는 투표를합니다. – user7813604

2

클래스 super.clone() 그 결과 (Bike) (모형은 다음 식의 결과에 적용된다)을 사용하여 캐스팅 먼저 행한다.

Object#clone()을 재정의 했으므로 캐스트가 필요합니다. 이는 제네릭 이전의 JDK1.0으로 거슬러 올라가며 반환 유형은 Object입니다. 함수 호출보다

1

이후를 반환 Object.clone()에서 상속하는 방법 인 super.clone()를 호출하고 있기 때문에

귀하의 경우에는
(Foo) a.f1().f2().f3() // Casts to Foo at the end of the calls chain 

캐스트가 필요하다 Prototype은 super.clone()이 호출 될 때 복제 된 객체가 반환 된 다음 자전거의 Prototype의보다 구체적인 하위 클래스로 명시 적으로 유형이 변환 된 자전거의 수퍼 클래스입니다.

유형 캐스팅은 Bike 클래스의 요구 사항에 맞게 필요합니다. 생성 된 모든 객체는 수퍼 클래스로 Object 클래스가 있지만 수퍼 클래스 (Object 클래스)에 정의되지 않은 사용자 정의 메소드도 있습니다. 자식 클래스에 캐스트를 입력하면 동일한 객체에서 부모 메서드와 자식 메서드에 액세스 할 수 있습니다.