Protected não entendo!

Salve galera.
To com uma dúvida, que pra muitos já batida, mas não consigo entender pq o código abaixo não compila.

[code]public class Aluno {
protected int x;
}

class Professores{
public static void main(String [] args){
Aluno aluno = new Aluno();
aluno.x;
}
[/code]

Dá o erro: Syntax error, insert “AssignmentOperator Expression” to complete Expression

Entao a dúvida é a seguinte: as duas classes estão no mesmo pacote, portanto eu deveria conseguir acessar a variável x que é protected, pois as classes são do mesmo pacote, mas não rola! :evil:
Alguem me dá uma luz!
Inté.

Acho que o problema que está acontecendo é que você colocou uma expressão incompleta no seu código. O erro de compilação indica que falta aguma coisa para a expressão que você escreveu ficar sintaticamente correta. Tenta algo assim:

public class Aluno {
  protected int x;
}


class Professores{
	public static void main(String [] args){
		Aluno aluno = new Aluno();
		aluno.x = 1;
	}

[]'s.

Olhando assim, o único erro neste código é o fato de aluno.x não estar sendo atribuido a nada, o que gera o erro de compilação “not a statement”.

Assim compila e roda:

[code]public class Aluno {
protected int x;
}

class Professores{
public static void main(String [] args){
Aluno aluno = new Aluno();
int y = aluno.x;
} [/code]
Não vejo nenhum erro referente a assinatura dos métodos e dos atributos.

Abraço.

cara não se acessa variavel assim…
ah não ser que esteja dentro de um System.out.println ou como os cara fizeram ai em cima…
e não tem nada a ver com o protected… com qualquer modificador vai da erro assim…
att

[quote=rmalati]Salve galera.
To com uma dúvida, que pra muitos já batida, mas não consigo entender pq o código abaixo não compila.

[code]public class Aluno {
protected int x;
}

class Professores{
public static void main(String [] args){
Aluno aluno = new Aluno();
aluno.x;
}
[/code]
[/quote]

Primeira coisa: Está faltando um } para terminar a classe Professores.

Segunda coisa: “aluno.x;” não é uma instrução. Acessar um campo sem ler e nem escrever o seu valor não tem sentido, e o compilador sabe disso.
Se você colocasse “aluno.x = 5;”, “aluno.x++;”, “int y = aluno.x;” ou “aluno.toString();” daí faria sentido, mas “aluno.x;” não faz sentido.

Agora eu entendi de verdade.
Obrigado a todos pela força.
8)