Почему методы в классе Объект защищен И почему его публикация не существует какой-либо обоснованной причины?Почему методы класса объектов защищены?
protected native Object clone() throws CloneNotSupportedException;
Почему методы в классе Объект защищен И почему его публикация не существует какой-либо обоснованной причины?Почему методы класса объектов защищены?
protected native Object clone() throws CloneNotSupportedException;
Это позволяет разработчику класса решить, подходит ли класс для поддержки клонирования. Метод protected
Object.clone()
- это то, что класс вызывает для реализации клонирования ... если он хочет использовать собственный механизм клонирования.
Если я хочу, чтобы мой класс был клонированным, я добавляю общедоступный метод клонирования; например
public class MyClass implements Cloneable {
....
public Object clone() {
super.clone();
}
}
Если я хочу клонировать быть доступны внутри, я пишу:
public class MyClass implements Cloneable {
....
// Don't provide a public override for `clone()`.
}
Если я не хочу, не клонировать, я пишу:
public class MyClass {
...
}
В противоположность этому, если Object.clone()
был public
, то каждый объект, по идее, поддерживал бы cl что касается компилятора! Это было бы плохо, потому что есть много классов, где клонирование не имеет смысла, вредно или не может быть реализовано.
В случае finalize()
, было бы вредно, если произвольный код может инициировать логику завершения работы на объекте. Для GC это имеет смысл только для этого, или в некоторых случаях для класса и его подклассов.
Обратите внимание, что если вы реализуете метод finalize()
, целесообразно подключить его к суперклассу finalize()
; например
protected void finalize() {
// Do my finalization
super.finalize();
}
... даже если суперкласс в настоящее время имеют финализации.
Если класс C2 расширяет C1 и C1 содержит открытый метод, то метод в C2 (если он переопределен) также должен быть общедоступным; Java запрещает устанавливать дополнительные ограничения на доступ к методу при переопределении. Если C1 содержит защищенный метод, тогда переопределяющий метод в C2 может быть защищен или общедоступен.
Вот StackOverflow принял ответ для более подробной информации
Why does the Object class in Java contain protected methods?
Это _implementation detail_ как Java обрабатывает клонированию. IMO-документ о [Cloneable interface] (http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html) может помочь (_per-se_ у вас может даже быть открытый Object.clone (), даже если вы выбрали исключение почти всегда, но с этим _pattern_ вы разделяете базовое _behavior_, заданное базовым классом). –