TestClass.clone (). Чтобы это работало, вы должны иметь доступ на уровне пакета к объекту, который у вас нет, и, следовательно, к ошибке.
вое слово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()
.