Я изучаю 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 на самом деле работает одинаково. –
Я думаю, что большинство объектно-ориентированных языков работают таким образом. Я знаю, что C# и C++ делают. По-видимому, Ruby и VB6 имеют частные переменные экземпляра, а Scale может делать 'private [this]', но это все, что я знаю об этой работе, наоборот. (Я знаю только о Ruby, VB6 и Scala из комментариев в связанном ответе.) –