Re:duvida modificador protected

Não; você está confundindo “protected” (variáveis visiveis apenas para a classe em si, as classes no mesmo pacote e para suas subclasses) com “package-private” (ou seja, quando não pomos modificador nenhum, uma variável é “package-private”).

Sim esta correto, e são visiveis fora do pacote também, mas somente se for herdado.
Mas tambem depende do modificador da classe.

java_coffe é complicado, por que:

Variável com modificador de acesso protected não são visiveis apenas por classes que estejam contidas no mesmo pacote.

Elas são visiveis em outros pacotes também atraves de herança, é uma pegadinha, na verdade uma baita sacanagem.

Exatamente vanzela, o modificador protected é caracterizado por ser acessível através de suas subclasses, não tendo muita relação com classes do pacote. A questão está errada. É como thingol disse, se essa afirmação fosse feita para “package-private” ela estaria correta.

Se for interpor um recurso, você precisa alguma justificativa sólida (de preferência, citando a Java Language Specification. )
Mas acho que a JLS diz que a sua afirmativa está errada, como afirmei mais acima. Ela diz, traduzindo: "Um membro ou construtor “protected” de um objeto pode ser acessado de fora do pacote em que é declarada apenas por código que é responsável pela implementação desse objeto. " “Acesso é permitido apenas dentro do corpo de uma subclasse S de C”.

Segundo o parágrafo 6.6.2.1 - pg. 139 da versão 3.0 da JLS:

[quote=JLS 3.0]
6.6.2 Details on protected Access
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.

Access to a protected Member
Let C be the class in which a protected member m is declared. Access is permitted only within the body of a subclass S of C. In addition, if Id denotes an
instance field or instance method, then:
? If the access is by a qualified name Q.Id, where Q is an ExpressionName,
then the access is permitted if and only if the type of the expression Q is S or a
subclass of S.
? If the access is by a field access expression E.Id, where E is a Primary
expression, or by a method invocation expression E.Id(. . .), where E is a
Primary expression, then the access is permitted if and only if the type of E is
S or a subclass of S.

Calma aí pessoal! Façam o teste no código, o modificador protected tem haver sim com o pacote, pois ele deixa visiíel para qualquer classe DENTRO mesmo pacote o atributo ou método, mas restringe as classes que estão FORA do pacote a vizualizarem o método/atributo apenas através de herança.

Aquele “apenas” ali que matou a questão. :slight_smile:

Isso mesmo francislon, literalmente a questão esta errada.
O modificador protected é um dos mais complicadinhos pra entender, pois é quase identico ao default, mas com uma pequena brecha, que é a herança fora do pacote.

[quote=java_coffe]Variável com modificador de acesso protected são visiveis apenas por classes que estejam contidas no mesmo pacote !?

Esta afirmação esta correta !?

[/quote]

Não. O “apenas” faz com que fique errado.

Variável com modificador de acesso protected são visiveis por classes que estejam contidas no mesmo pacote e por classes que estendam essa classe.

francislon se não tem muita relação com classes do pacote então roda isso pra mim cara:

package animaisGrandes;

class Cavalo {
	protected int a = 10;
}
package animal;

import animaisGrandes.Cavalo;

class Cachorro extends Cavalo {
	public Cachorro()
	{
		System.out.println(a);
	}
	
	public static void main(String arg[])
	{
		new Cachorro();
	}
}

O modificador da classe interfere muito nos modificadores de membros.

a classe Cavalo tem que ser publica

ta errada como todo mundo já disse o apenas condenou a questão.

[quote]
francislon se não tem muita relação com classes do pacote então roda isso pra mim cara:[/quote]

Eu apenas me expressei mal, eu quis dizer que a maior vantagem do protected não está relacionada com as classes de dentro do pacote. :slight_smile:

o modificador protected so faz diferença quando vc quer acessar um membro de uma classe em pacotes diferentes, através da herança… além disso nao existe nenhuma diferente em questao de restritação de pacote.

protected = posso acessar o membro, atraves de package diferente, somente atraves da herança.

:smiley:

Variável com modificador de acesso protected são visiveis apenas por classes que estejam contidas no mesmo pacote !?

Esta afirmação esta correta !?

Amigos do GUJ eu fiz uma questao em uma prova de concurso que apontou esta alternativa como a errada .

Se eu entrar com uma ação eu acho que eu ganho esse pontinho .

POis eu tive a mesma impressão de esta prova esta correta .

Esta certa ou errada !?