Como os métodos protegidos de java.lang.Object estão protegidos de subclasses?
A palavra-chaveprotected
concede acesso a classes no mesmo pacote e subclasses (http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)
Agora, toda classe temjava.lang.Object
como superclasse (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)
Por isso, concluo que toda classe pode acessarjava.lang.Object
métodos, mesmo que sejamprotected
.
Veja o seguinte exemplo:
public class Testclass { public Object getOne() throws CloneNotSupportedException { return this.clone(); } public Object getTwo() throws CloneNotSupportedException { return ((Object) this).clone(); } }
EnquantogetOne()
compila bem,getTwo()
dá
Testclass.java:6: clone() has protected access in java.lang.Object return ((Object) this).clone();
Eu também não entendo porquegetTwo()
não compila nem qual a diferença (em relação ao acesso dejava.lang.Object
s membros) comgetOne()
.