Enum só default e public?

Olá pessoal

Estive lendo o guia para certificação da kathy e lá me deparei com uma afirmação:

Enums só podem ser default ou public.

Tudo bem, se estiver fora da classe sim, só podem ser default e public, mas … se estiver dentro da classe pode ter qulquer modificador de acesso:


public class TesteEnum {

	Cor cor = Cor.azul;
	
	protected enum Cor{azul,verde,amarelo}
	
}

class TentaEnum{
	
	TesteEnum.Cor cor = TesteEnum.Cor.amarelo;
	
}

o código acima compila normalmente, observe que o enum ai foi declarado com o modificador protected.

Minha afirmação tá certa ou eu to viajando? Tem alguma coisa que eu não to conseguindo enxergar? ou é iso mesmo?

VALEW

Pense numa enum como uma classe. Ela vai obedecer os mesmo modificadores de acesso.

Se for uma classe separada, só pode ser public ou default/package.
Se for o membro interno de uma outra classe, pode ter qualquer modificador de acesso. Pois vai funcionar como um membro desta classe(como uma classe interna).

dentro da classe enum é um membro da classe entao um membro vc pode usar todos os modifiadores e fora da classe enum é um tipo de class especial… entao vc nao declara uma class asism:


private class Java{
 
}

Não existe isso acima … ou é public ou é default… mesma regra se aplica a enum, ja que ela é um tipo especial de class.

opa

entendi

Brigadão gente XD

[quote=Rafael Nunes]Pense numa enum como uma classe. Ela vai obedecer os mesmo modificadores de acesso.

Se for uma classe separada, só pode ser public ou default/package.
Se for o membro interno de uma outra classe, pode ter qualquer modificador de acesso. Pois vai funcionar como um membro desta classe(como uma classe interna).[/quote]

Quase. Na verdade há um detalhezinho que faz diferença: Classes locais a métodos:

public void metodo() {
    // compila ok.
    class X {
        private int y;
    }

    // NÃO COMPILA!!!!
    enum Z {
        A, B, C;
        private int y;
    }
}

[size=18]Pegadinha FDP:
[color=red]VOCÊ NÃO PODE TER ENUMS LOCAIS A MÉTODOS[/color][/size]

AH tah … mas q não pode colocar uma Enum dentro de um método eu sabia XD

Ainda bem. Mas é só para ressaltar que as regras não são as mesmas e sim são QUASE as mesmas. E essa merda de pegadinha cai na prova!

Valew cara XD

Ainda bem. Mas é só para ressaltar que as regras não são as mesmas e sim são QUASE as mesmas. E essa merda de pegadinha cai na prova![/quote]

concerteza cai, brincando essas pegadinhas… ehhe… lembrar as regras e saber o por uqe é o essencial…

alem disso, nao existe enum inner no sentido real da palavra: toda enum aninhada é estatica, nao tem como fugir disso.

Tem razão, tem mais essa regra exotérica. Se o enum é uma classe interna, ele tem o static implícito.

bem lembrado!!! 8)