O atributo enum esta definido como protected, sendo assim apenas suas classes filhas mesmo é que poderão acessa-lo.
aajjbb
sim, já que os atributos protected são visiveis as subclasses, e ClasseFilha extende ClasseMae.
faeldix
mas eu acessei diretamente… e estou em outro pacote
macafe
Sim, você acessou diretamente… porém de dentro de uma classe filha, portanto você vai ter acesso ao atributo. Também funcionaria: ClasseFilha.attributo
[]'s
Arthemus
Isso mesmo, como macafe disse, você tem acesso de dentro de uma classe filha. Qualquer membro da superclasse definido como protected, independente do pacote, é visível apenas as suas classes filhas.
faeldix
mas pessoal… eu acessei DIRETAMENTE… subclasses(de outro pacote) so tem acesso aos atributos da superclasse através de herança…
E isso que eu acho estranho
Arthemus
Mas você não esta fazendo isso mesmo no seu exemplo? A ClasseFilha não é uma herança da ClasseMae?
Esse exemplo vai gerar um erro de compilação. Você usa this pra se referência a um membro da própria classe. Mesmo com a herança o correto seria se referenciar diretamente ao atributo.
Veja esses exemplos:
packagebr.com.pacote1;publicclassSuperClasse{privateenummembroPrivado{TIPO_QUALQUER}protectedenummembroProtegido{OUTRO_TIPO_QUALQUER}publicenummembroPublico{MAIS_UM_TIPO}}packagebr.com.pacote2;importbr.com.pacote1.SuperClasse;publicclassClasseFichaextendsSuperClasse{publicvoidteste(){System.out.println(membroProtegido.OUTRO_TIPO_QUALQUER);// acesso legal pela herançaSystem.out.println(membroPublico.MAIS_UM_TIPO);// acesso legal de um memblo publicoSystem.out.println(membroPrivado.TIPO_QUALQUER);// erro de compilação, membro privado}}packagebr.com.pacote3;importbr.com.pacote1.SuperClasse;publicclassOutraClasse{publicvoidteste(){System.out.println(SuperClasse.membroPublico.MAIS_UM_TIPO);// acesso legal, membro publicoSystem.out.println(SuperClasse.membroProtegido.OUTRO_TIPO_QUALQUER);// erro de compilação, um membro // protegido só é visivel para as subclasse da SuperClasse.}}
ErickRAR
Se é protected e voce herdou, poderá acessar. Não poderá acessar caso seja default ou private. Esses modificadores de acesso são iguais para metodos, variaveis,enums etc.
Acho q o q causa um pouco d confusão é q quando um enum é membro d uma classe, ele é implicitamente estático. Portanto tem como acessar o enum dessa maneira q vc postou. Da mesma maneira q se fosse uma variável qq estática, vc poderia acessar dessa forma, colocando o nome da superclasse na frente.
Agora se o membro não for estático, faz sentido o q vc flw. Ai se vc colocar o nome da superclasse na frente dará erro. Nesse caso vc pode acessar usando o this ou nome do membro diretamente.