2015-03-02 5 views
0

Почему методы в классе Объект защищен И почему его публикация не существует какой-либо обоснованной причины?Почему методы класса объектов защищены?

protected native Object clone() throws CloneNotSupportedException; 
+0

Это _implementation detail_ как Java обрабатывает клонированию. IMO-документ о [Cloneable interface] (http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html) может помочь (_per-se_ у вас может даже быть открытый Object.clone (), даже если вы выбрали исключение почти всегда, но с этим _pattern_ вы разделяете базовое _behavior_, заданное базовым классом). –

ответ

0

Это позволяет разработчику класса решить, подходит ли класс для поддержки клонирования. Метод protectedObject.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(); 
    } 

... даже если суперкласс в настоящее время имеют финализации.

1

Если класс C2 расширяет C1 и C1 содержит открытый метод, то метод в C2 (если он переопределен) также должен быть общедоступным; Java запрещает устанавливать дополнительные ограничения на доступ к методу при переопределении. Если C1 содержит защищенный метод, тогда переопределяющий метод в C2 может быть защищен или общедоступен.

Вот StackOverflow принял ответ для более подробной информации

Why does the Object class in Java contain protected methods?

Смежные вопросы