De bobeira mais uma vez, e continuando a fazer as minhas notas de estudo, eu achei mais uma coisa que, pelo menos eu, não estava acostumado a ver. Quando queremos definir o controle de acesso a membros e métodos, normalmente nós usamos 3 palavras chave: public, private e protected. Mas alguém tem noção do que acontece se, por acaso, nenhum dos três é definido?
Pois bem, estudando pelo livro da certificação, eu matei a curiosidade. Protected e default (quando você não define nenhum controle de acesso) tem algo em comum. Dê uma olhada nas duas classes abaixo:
Como você pode perceber, o método algumMetodo() da classe A é marcado como acesso padrão: sem nenhum modificador de acesso. Pense nisso como controle de acesso a nivel de pacote, isto é, o método em questão só pode ser acessado por classes no mesmo pacote da classe A. Um erro ocorre ao se tentar compilar o código acima:
No quesito herança, um método ou membro com controle de acesso padrão só é acessivel por subclasses se estas estiverem no mesmo pacote que suas superclasses.
package pacote; public class A { void algumMetodo() { System.out.println("teste"); } }
package outropacote; import pacote.A; public class B { public static void main(String[] args) { A a = new A(); a.algumMetodo(); } }
Como você pode perceber, o método algumMetodo() da classe A é marcado como acesso padrão: sem nenhum modificador de acesso. Pense nisso como controle de acesso a nivel de pacote, isto é, o método em questão só pode ser acessado por classes no mesmo pacote da classe A. Um erro ocorre ao se tentar compilar o código acima:
No method matching algumMetodo () found in class pacote.A. a. algumMetodo ();
No quesito herança, um método ou membro com controle de acesso padrão só é acessivel por subclasses se estas estiverem no mesmo pacote que suas superclasses.