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.
