Resolvendo umas questões do enthuware encontrei esta que me deixou confuso com relação ao modificador de acesso protected. Até onde eu sei o protected permiti a visibilidade de pacote ou em pacotes diferentes através da herança. Sendo que ao tentar compilar o código abaixo recebi um erro de compilação dizendo que a variavel i possui acesso protected:
Para piorar a situação adicionando static a mesma variavel o código compila e executa normalmente. Alguem faz idéia do porque disso acontecer?
Na classe filha, você pode acessar os métodos e atributos da classe pai através da palavra reservada super.
Você está tentando acessar o atributo “i” de uma variável ‘externa’ “a”, ou seja, é uma variável que não pertence a classe B, apesar de você estar codificando dentro da classe B.
O que você está tentando fazer é a mesma coisa que não usar a herança:
Na verdade, sempre que vc fizer acesso a um método ou variável com modificador de acesso "protected" apartir de um outro pacote, vc deve sempre referenciar o objeto à subclasse.