Sim, você acessou diretamente… porém de dentro de uma classe filha, portanto você vai ter acesso ao atributo. Também funcionaria: ClasseFilha.attributo
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.
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
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.
public void teste() {
System.out.println(membroProtegido.OUTRO_TIPO_QUALQUER); // acesso legal pela herança
System.out.println(membroPublico.MAIS_UM_TIPO); // acesso legal de um memblo publico
System.out.println(membroPrivado.TIPO_QUALQUER); // erro de compilação, membro privado
}
}
package br.com.pacote3;
import br.com.pacote1.SuperClasse;
public class OutraClasse {
public void teste() {
System.out.println(SuperClasse.membroPublico.MAIS_UM_TIPO); // acesso legal, membro publico
System.out.println(SuperClasse.membroProtegido.OUTRO_TIPO_QUALQUER); // erro de compilação, um membro
// protegido só é visivel para as subclasse da SuperClasse.
}
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.
package pacotea;
public class ClasseA {
protected String acessivel;
String inacessivel;
}
package pacoteb;
import pacotea.ClasseA;
public class ClasseB extends ClasseA{
public ClasseB(){
this.acessivel = ""; //de boa na lagoa
this.inacessivel = ""; // erro nesta linha;
}
}
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.