2011-11-14 3 views
2

나는 Effective Java를 읽고 있는데이 책에는 복제 방법에 대한 아래 의견이 있습니다. 실제로Java : 복제 방법에 대한 질문

, 는 Cloneable를 구현하는 클래스는 제대로 작동 공공 복제 방법을 제공 할 것으로 예상된다. 일반적으로 클래스의 모든 수퍼 클래스가 public 또는 protected 중 어느 하나라도 올바르게 작동하는 복제 구현을 제공하지 않는 한 그렇게 할 수 없습니다.

누구도이 작업을 수행 할 수없는 이유를 제시 할 수 있습니까?

답변

3

기본 클래스 중 하나에 "복제본"이 의미 론적으로 유효하도록 특정 방식으로 복사되는 비공개 필드가 있다고 상상해보십시오.

기본 클래스가 올바른 복제 구현을 제공하지 않으면 파생 클래스는 해당 개인 필드를 올바르게 작성할 수 없습니다.

1

기본적으로 클래스 계층의 일부가 제어 할 수없고 JDK (즉 타사 폐쇄 소스 클래스)의 일부가 아닌 클래스를 포함하고 있으며이 클래스는 올바르게 작동하는 clone()을 구현하지 않습니다 방법을 사용하는 경우, 하나를 만드는 것이 특히 쉽지는 않습니다.

0

대부분의 경우 클래스는 일반적으로 구현되지 않은 복제본으로 작성됩니다. 따라서 자식 클래스가 작성되면 복제되지 않은 채로 작성됩니다. 어느 시점에서는 자식 클래스에 복제 메서드를 작성해야하지만 부모에게는 복제 메서드가 없습니다.

0
`@override 
public MyClass clone(){ 

Myclass clonedObj = super.clone(); // This is why the classtree all needs to be cloneable 

// now copy values of all members to the new obj. 
// be carefull to not copy references 
clonedobj.setMyMember(this.getMyMember()); // copy of member var; 
clonedobj.setMyotherMember(this.getMyOtherMember().clone()); // a composit obj must be cloned. 

} 
` 

이것은 anwser 일 수 있습니까?

관련 문제