Ключевое слово protected
предоставляет доступ к классам в одном пакете и подклассах (http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html).
Теперь каждый класс имеет java.lang.Object
как суперкласс (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html).
Следовательно, я делаю вывод, что каждый класс может обращаться к java.lang.Object
методам, даже если они protected
.
Взгляните на следующий пример:
public class Testclass { public Object getOne() throws CloneNotSupportedException { return this.clone(); } public Object getTwo() throws CloneNotSupportedException { return ((Object) this).clone(); } }
Пока getOne()
компилируется отлично, getTwo()
дает
Testclass.java:6: clone() has protected access in java.lang.Object return ((Object) this).clone();
Я не понимаю, почему getTwo()
не компилирует и не имеет разницы (относительно доступа членов java.lang.Object
) с getOne()
.