저는 Java를 배우고 있으며, 제가 읽고있는 책에는 복제에 대한 다음 예제가 있습니다. clone()
에서 버퍼가 private
인데도 첫 번째 인스턴스가 새 오브젝트에 버퍼를 설정할 수 있습니다. 이 기능을 사용하려면 필드가 protected
이어야합니다.다른 개체의 개인 필드를 복제 할 수있는 이유는 무엇입니까?
왜 허용됩니까? clone()
에 private
필드에 액세스 할 수있는 특별한 권한이 있습니까?
public class IntegerStack implements Cloneable {
private int[] buffer;
private int top;
// ... code omitted ...
@Override
public IntegerStack clone() {
try{
IntegerStack nObj = (IntegerStack) super.clone();
nObj.buffer = buffer.clone();
return nObj;
} catch (CloneNotSupportedException e)
{
throw new InternalError(e.toString());
}
}
}
감사합니다! 나도 PHP를 안다. 그래서 나는 PHP의 private 버전이 실제로 같은 방식으로 작동한다는 것을 확인했다. –
저는 대부분의 객체 지향 언어가 이런 식으로 작동한다고 생각합니다. 나는 C# 및 C++을 알고 있습니다. 분명히 루비와 VB6는 인스턴스 - 프라이빗 변수를 가지고 있으며 Scale은 private [this]를 할 수 있습니다. (링크 된 답변의 주석에서 Ruby, VB6 및 Scala에 대해서만 알고 있습니다.) –