Fala, meus consagrados! Tudo beleza com vocês?
Na Parte I (Teoria), vimos que os modificadores de acesso são padrões de visibilidade de acessos a classes e membros de uma classe (atributos e métodos). Determinam se uma classe pode usar uma outra, invocando um determinado atributo ou um determinado método. Agora, iremos ver como esse assunto é cobrado em concursos em 16 questões comentadas. Então simbora comigo!
Questões de concursos
[1] [VUNESP 2019 Prefeitura de Itapevi/SP – Analista em Tecnologia da Informação e Comunicação] No Java, o modificador de nível de acesso que torna o método acessível apenas dentro do escopo da classe na qual foi declarado, ou em subclasses, é:
[A] abstract.
[B] private.
[C] protected.
[D] public.
[E] virtual.
Comentários:
A questão cita um modificador de nível de membro, ou seja, aquele aplicado a atributos e métodos de uma classe. Revisamos, temos:
De acordo com a imagem acima, temos:
- public torna um membro da classe visível :
- Pela própria classe;
- Pelas classes do mesmo pacote;
- Pelas subclasses; e
- Por qualquer classe, mesmo de outros pacotes;
- protected torna um membro da classe visível :
- Pela própria classe;
- Pelas classes do mesmo pacote; e
- Pelas subclasses;
- default torna um membro da classe visível :
- Pela própria classe; e
- Pelas classes do mesmo pacote; e
- private torna um membro da classe visível pela própria classe.
De acordo com o enunciado, “… o modificador de nível de acesso que torna o método acessível apenas dentro do escopo da classe na qual foi declarado, ou em subclasses”, ou seja, a questão cita o protected. Com isso, marcamos a letra C como gabarito e eliminamos letras B (private) e D (public).
Comentando as letra A e E, temos:
- abstract:
- É um modificador aplicável a apenas a classes e métodos; e
- É usado para obter abstração, que é um dos pilares da Programação Orientada a Objetos (POO); e
- virtual:
- Não existe na Linguagem Java.
Gabarito: letra C.
[2] [UFC 2019 UFC – Técnico de Tecnologia da Informação – Desenvolvimento de Sistemas] Em Java 8, qual modificador de acesso torna um membro disponível somente para classes dentro do mesmo pacote ou subclasses?
[A] public
[B] default
[C] private
[D] protected
[E] package-private
Comentários:
Essa questão é parecida com a questão [1]. O enunciado cita o “… modificador de acesso torna um membro disponível somente para classes dentro do mesmo pacote ou subclasses”, ou seja, a questão cita o protected. Com isso, marcamos a letra D como gabarito e eliminamos letras A (public), B (default) e C (private).
Apenas como complemento, package-private, da letra E, não existe na Linguagem Java.
Gabarito: letra D.
[3] [IBADE 2019 IFRO – Analista de Tecnologia da Informação] Os modificadores de acesso são padrões de visibilidade de acessos às classes, atributos e métodos. Esses modificadores são palavras-chave reservadas pelo Java, ou seja, palavras reservadas não podem ser usadas como nome de métodos, classes ou atributos. Os modificadores de acesso são classificados conforme as descrições abaixo:
[1] indica que método ou variável só podem ser acessados de dentro da classe que os criou. Uma classe que herde de uma superclasse com atributos declarados de acordo com esse modificador só poderá ter acesso a eles através dos métodos públicos da própria superclasse, caso contrário, não haverá acesso a estes atributos.
[2] indica que o método ou a variável assim declarada possa ser acessada somente dentro do pacote em que está contida através de uma subclasse.
[3] indica que a classe, método ou variável assim declarada possa ser acessada em qualquer lugar e a qualquer momento da execução do programa.
Os modificadores de acesso descritos como [1], [2] e [3] são denominados, respectivamente:
[A] protected, public e static.
[B] dynamic, private, protected.
[C] public, static e dynamic.
[D] private, protected e public.
[E] static, dynamic e private.
Comentários:
Indicando corretamente os modificadores de nível de acesso, temos:
- [1] private:
- Indica que método ou variável só podem ser acessados de dentro da classe que os criou;
- Uma classe que herde de uma superclasse com atributos declarados de acordo com esse modificador só poderá ter acesso a eles através dos métodos públicos da própria superclasse;
- Caso contrário, não haverá acesso a estes atributos;
- [2] protected:
- Indica que o método ou a variável assim declarada possa ser acessada somente dentro do pacote em que está contida através de uma subclasse; e
- [3] public:
- Indica que a classe, método ou variável assim declarada possa ser acessada em qualquer lugar e a qualquer momento da execução do programa.
Comentando sobre os outros modificadores, temos:
- static:
- Foi citado pelas letras A, C e E;
- É usado principalmente para gerenciamento de memória;
- Pode ser aplicado:
- Atributos:
- Um atributo estático contém informação da classe e não de uma instância (objeto);
- Métodos:
- Um método estático trabalha com atributos estáticos;
- Blocos de código:
- É usado para inicializar o membro de dados estáticos; e
- Ele é executado antes do método principal no momento do carregamento da classe; e
- Classes aninhadas; e
- Atributos:
- dynamic:
- Foi citado pelas letras B, C e E;
- Não existe na Linguagem Java.
Gabarito: letra D.
[4] [FGV 2018 AL/RO – Analista Legislativo – Banco de Dados] No contexto da linguagem Java, assinale o modificador (modifier) que se refere ao nível de acesso.
[A] abstract
[B] final
[C] protected
[D] static
[E] volatile
Comentários:
Na Linguagem Java, há dois níveis de modificadores de acesso:
- Nível superior:
- Aplicados a classes;
- São os seguintes modificadores:
- public; e
- default;
- Sem modificador explícito; e
- Nível de membro:
- Aplicados a:
- Atributos; e
- Métodos;
- São os seguintes modificadores:
- private;
- public;
- protected;
- default;
- Sem modificador explícito.
- Aplicados a:
Das letras da questão, apenas a letra C cita o modificador de nível de acesso da Linguagem Java.
Os outros modificadores citados são:
- abstract:
- Citado na questão [1];
- final:
- Pode ser aplicado a:
- Atributos:
- Um atributo final não pode ter seu conteúdo modificado após ter sido inicializado;
- Métodos:
- Um método final não pode ser sobrescrito; e
- Classes:
- Uma classe final não pode ser estendida;
- Atributos:
- Pode ser aplicado a:
- static:
- Citado na questão [3];
- volatile:
- É usada para marcar um atributo como sendo armazenado na memória principal;
- Ou seja, significa que:
- Que cada leitura de um atributo volátil será lida da memória principal do computador, e não do cache da CPU; e
- Que cada gravação em um atributo volátil será gravada na memória principal, e não apenas no cache da CPU .
- Ou seja, significa que:
- É usada para marcar um atributo como sendo armazenado na memória principal;
Gabarito: letra C.
[5] [FEPESE 2019 CELESC – Analista de Sistemas – Desenvolvimento] Analise as afirmativas abaixo com relação aos modificadores de acesso (qualificadores) em java.
[1] Os modificadores de acesso, também conhecidos como qualificadores são a forma de visibilidade das classes, dos métodos e atributos, ou seja, define quem poderá acessá-los, como por exemplo, se for colocado o qualificador public será visível em todo o projeto, todas as classes e pacotes.
[2] O que declaramos como private será visível apenas para a classe em que foi declarado, ou seja, fica restrito à classe. Pode ser utilizado em atributos, métodos e construtores.
[3] Quando declaramos com qualificador anonymous somente é possível acessar o método ou a variável se estiver no mesmo pacote, ou seja, se torna visível pela própria classe, por subclasses e pelas classes do mesmo pacote.
Assinale a alternativa que indica todas as afirmativas corretas.
[A] É correta apenas a afirmativa 1.
[B] É correta apenas a afirmativa 3.
[C] São corretas apenas as afirmativas 1 e 2.
[D] São corretas apenas as afirmativas 1 e 3.
[E] São corretas apenas as afirmativas 2 e 3.
Comentários:
Comentando cada item:
- Item [1]: “Os modificadores de acesso, também conhecidos como qualificadores são a forma de visibilidade das classes, dos métodos e atributos, ou seja, define quem poderá acessá-los, como por exemplo, se for colocado o qualificador public será visível em todo o projeto, todas as classes e pacotes”;
- CERTO. O item corretamente conceituou e exemplificou os modificadores de nível de acesso;
- Item [2]: “O que declaramos como private será visível apenas para a classe em que foi declarado, ou seja, fica restrito à classe. Pode ser utilizado em atributos, métodos e construtores”;
- CERTO. O modificador private pode ser utilizado em atributos e métodos. Não foi comentado no artigo anterior, mas podemos sim aplicar também a construtores; e
- Item [3]: “Quando declaramos com qualificador anonymous somente é possível acessar o método ou a variável se estiver no mesmo pacote, ou seja, se torna visível pela própria classe, por subclasses e pelas classes do mesmo pacote”;
- ERRADO. anonymous não existe e a definição do item [3] trata do modificador protected.
Com isso, apenas os item [1] e [2] estão corretos, ou seja, letra C.
Gabarito: letra C.
[6] [FCC 2010 TRT 4ª Região – Analista Judiciário – Especialidade Informática – Questão 45] Sobre a orientação a objetos, é correto afirmar: (Marque CERTO ou ERRADO)
[A] Os modificadores de acesso public, private e protected controlam o acesso apenas aos métodos de uma classe.
Comentários:
Como vimos na questão [4], na Linguagem Java, há dois níveis de modificadores de acesso:
- Nível superior; e
- Nível de membro.
Os modificadores public e default podem ser aplicados tanto a classes quanto a membros de classe (atributos e métodos).
Voltando à questão, os modificadores de acesso public, private e protected, como modificadores de acesso de nível de membro, controlam o acesso aos membros de uma classe (atributos e métodos) e não apenas aos métodos de uma classe.
Gabarito: ERRADO.
[7] [FCC 2009 TRT 16ª Região – Técnico Judiciário – Tecnologia da Informação – Questão 27] A diretiva public é utilizada em Java para aplicar a encapsulação pública
[A] aos métodos e classes, apenas.
[B] aos atributos, métodos e classes.
[C] às classes, apenas.
[D] aos atributos, apenas.
[E] aos atributos e classes, apenas.
Comentários:
Como visto na questão [6], os modificadores public e default podem ser aplicados tanto a classes quanto a membros de classe (atributos e métodos). A questão perguntou apenas sobre o modificador public, ou seja, letra B.
Gabarito: letra B.
[8] [FCC 2009 TRE/AM – Técnico Judiciário – Programação de Sistemas – Questão 66] Dentre as aplicações dadas, Public aplica-se a
[I] Atributo.
[II] Variável local.
[III] Método.
[IV] Classe.
Dentre as aplicações dadas, Public aplica-se a
[A] I, III e IV, apenas.
[B] I, II, III e IV.
[C] II, III e IV, apenas.
[D] II e IV, apenas.
[E] III e IV, apenas.
Comentários:
Como visto na questão [6], os modificadores public e default podem ser aplicados tanto a classes quanto a membros de classe (atributos e métodos). A questão perguntou apenas sobre o modificador public, ou seja, ele pode ser aplicado a:
- [I] Atributo.
- [III] Método.
- [IV] Classe.
Os modificadores de nível de membro não são aplicados a variáveis locais, aquelas declaradas dentro de métodos e construtores.
Gabarito: letra A.
[9] [COMPERVE 2020 TJ/RN – Analista de Sistemas Sênior] Os modificadores de acesso são palavras-chave que delimitam o nível de acesso, visibilidade e encapsulamento de elementos na linguagem Java. Sobre os modificadores de acesso, é correto afirmar:
[A] o modificador protected permite que apenas a própria classe possa acessar o recurso.
[B] o modificador private permite que apenas a própria classe e as classes do mesmo pacote possam acessar o recurso.
[C] o modificador public permite que apenas a própria classe e aqueles que a herdarem possam acessar o recurso.
[D] o modificador default é atribuído quando não é informado nenhum modificador de acesso.
Comentários:
Comentando cada letra:
- Letra A: “o modificador protected permite que apenas a própria classe possa acessar o recurso”;
- ERRADO. A letra descreveu o modificador private;
- Letra B: “o modificador private permite que apenas a própria classe e as classes do mesmo pacote possam acessar o recurso”;
- ERRADO. A letra descreveu o modificador default;
- Letra C: “o modificador public permite que apenas a própria classe e aqueles que a herdarem possam acessar o recurso”;
- ERRADO. A letra descreveu o modificador protected;
- Letra D: “o modificador default é atribuído quando não é informado nenhum modificador de acesso”;
- CERTO. Exatamente e sua descrição foi citada pela letra B.
Gabarito: letra D.
[10] [COMPERVE 2020 TJ/RN – Analista de Sistemas Sênior] Analise o trecho de código Java abaixo.
A partir da análise do código, observa-se que
[A] será exibido um texto no console.
[B] o código não compila.
[C] será exibido o endereço de memória do objeto.
[D] os modificadores de acesso não podem estar ocultos.
Comentários:
Esta questão coloca em prática a utilização dos modificadores de nível de acesso em classes e em membros de classe.
O código da questão possui dois pacotes:
- br.jus.arquivos; e
- br.jus.documentos.
A classe default Texto (sem modificador explícito) está no pacote br.jus.arquivos, ou seja, como é uma classe default, a classe Texto é vista por classes do mesmo pacote. Essa classe possui um método público getConteudo que retorna uma string “contéudo do arquivo texto”.
Já a classe também default MontarProcesso está no pacote br.jus.documentos, ou seja, como é uma classe default, a classe MontarProcesso é vista por classes do mesmo pacote. Essa classe possui o método main, com isso, a classe MontarProcesso é uma classe executável.
Mas percebam que tanto a classe Texto quanto a classe MontarProcesso são default e estão em pacotes diferentes. Elas não se enxergam e se uma das classes citar a outra, o compilador indicará um erro e não haverá execução. E é justamente o erro do código: a classe MontarProcesso está em um pacote diferente da classe Texto, mesmo assim, no método main do MontarProcesso cria uma instância da classe Texto, mas isso não é possível pelas classes default estarem em pacotes diferentes.
Com essa explicação desta excelente questão, vamos comentar cada letra:
- Letra A: “será exibido um texto no console”;
- ERRADO. O código não chega nem a ser executado, pois há um erro em tempo de compilação como explicado;
- Letra B: “o código não compila”;
- CERTO. Como foi explicado, o código não compila;
- Letra C: “será exibido o endereço de memória do objeto”;
- ERRADO. O código não chega nem a ser executado, pois há um erro em tempo de compilação como explicado;
- Letra D: “os modificadores de acesso não podem estar ocultos”;
- ERRADO. O modificador default é utilizado quando não citamos explicitamente um modificador.
Excelente questão para treinarmos a interpretação de códigos Java.
Gabarito: letra B.
[11] [CESPE 2018 STM – Técnico Judiciário – Programação de Sistemas] Julgue o item que se segue, relativo a Java SE.
Os membros de uma classe definidos como PUBLIC não podem ser acessados ou usados por nenhuma outra classe.
Comentários:
O texto citou o modificador private e não o modificador public.
Gabarito: ERRADO.
[12] [CESPE 2016 TRT 8ª Região – Cargo 11 – Questão 7] A respeito da programação em Java, assinale a opção correta. (Marque CERTO ou ERRADO)
[A] A palavra-chave private é um modificador de acesso e a declaração de uma variável como sendo private dentro de uma instância de um método é conhecida como ocultamento de instância.
Comentários:
O texto contém dois trechos errados que podemos corrigir da seguinte forma:
“A palavra-chave private é um modificador de acesso e a declaração de uma variável como sendo private dentro de uma classe é conhecida como encapsulamento“.
Não existe instância de método e sim, instância de classes, os conhecidos objetos.
E o conceito atrelado ao modificador private é o encapsulamento, um dos pilares da Programação Orientada a Objetos (POO). Esse conceito trata da habilidade de esconder as características intrínsecas de um dado objeto de outros objetos. Toda a comunicação inter objetos precisa ser realizada via métodos: um objeto não deve ser capaz de acessar e alterar atributos de outro diretamente.
Gabarito: ERRADO.
[13] [CESPE 2012 BASA – Cargo 17] Julgue o item seguinte, acerca da linguagem de programação Java.
[97] Em Java, para toda classe, método e variável de instância que se declara há um controle de acesso, independentemente de o controle ser explicitamente indicado.
Comentários:
Questão totalmente correta e se atentem a última parte: “… independentemente de o controle ser explicitamente indicado”. Isso indica o uso do default que é quando não usamos explicitamente um modificador.
Gabarito: CERTO.
[14] [CESPE 2012 BASA – Cargo 17] Julgue o item seguinte, acerca da linguagem de programação Java.
[98] Os métodos de uma classe Java criada com controle de acesso protect podem ser acessados apenas por classes do mesmo pacote.
Comentários:
O texto citou o modificador default.
Mesmo assim, temos mais um erro: protect não existe na Linguagem Java e sim o modificador protected, com “ed” no final.
Gabarito: ERRADO.
[15] [AOCP 2012 BRDE – Analista de Sistemas – Desenvolvimento de Sistemas – Prova TIPO 4] Preencha as lacunas e, em seguida, assinale a alternativa correta.
Na linguagem Java o escopo (visibilidade) de uma variável de instância pode ser controlado através do uso dos seguintes modificadores de variáveis. __________: qualquer um pode acessar variáveis de instância públicas. ____________: apenas métodos do mesmo pacote ou subclasse podem acessar variáveis de instância protegidas. ____________: apenas métodos da mesma classe (excluindo métodos de uma subclasse) podem acessar variáveis de instâncias privadas.
Preencha as lacunas e, em seguida, assinale a alternativa correta.
[A] public / protected / private
[B] private / final / public
[C] public / protected / abstrat
[D] final / static / protect
[E] private / libre / shuld
Comentários:
Como finalização da nossa jornada de questões, vamos preencher as lacunas da seguinte forma:
“Na linguagem Java o escopo (visibilidade) de uma variável de instância pode ser controlado através do uso dos seguintes modificadores de variáveis. public: qualquer um pode acessar variáveis de instância públicas. protected: apenas métodos do mesmo pacote ou subclasse podem acessar variáveis de instância protegidas. private: apenas métodos da mesma classe (excluindo métodos de uma subclasse) podem acessar variáveis de instâncias privadas”.
A letra A é nosso gabarito.
O modificador final não é um modificador de nível de acesso e foi explicado na questão 4. Esse modificador foi citado pelas letras B e D.
A letra C cita abstrat, que não existem na Linguagem Java. O certo seria abstract e não é um modificador de nível de acesso. Ele foi explicado na questão [1].
Além de final, a letra D cita static e protect. static não é um modificador de nível de acesso e ele foi explicado na questão [3]. protect não existe na Linguagem Java e sim o modificador protected, com “ed” no final.
libre e shuld não existem na Linguagem Java.
Gabarito: letra A.
Espero que gostem e desejo que se preparem conosco durante essa jornada na conquista de uma tão sonhada vaguinha em um concurso público.
Então é isso!
[]’s e até a próxima!
_________________________
Professor Rogerão Araújo
Participe da conversa