09 janeiro 2009

SCJP - 01 - Métodos protegidos versus controle de acesso padrão

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:

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.


Creative Commons License
Esta obra está licenciada sob uma Licença Creative Commons.
Comentários
0 Comentários

0 comments:

Postar um comentário

Regras são chatas, mas...

- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;