dúvida em enum

Opa…não consigo entender aquele corpo de método para constante do enum…tem a minha classe:

enum TamanhoCha {PEQUENO(8), MEDIO(10) {
		public String tipoCafe(){
			return "Tipo A";
		}
	}; 

	private int tamanho;
	
	//construtor
	TamanhoCha(int tamanho) {
		this.tamanho = tamanho;
	}
	//retorna tamanho
	public int getTamanho() {
		return tamanho;
	}
	//retorna o tipo do cafe para PEQUEENO???
	public String tipoCafe() {
		return "Tipo C";
	}
}

public class CorpoDeMetodoEnums {
	TamanhoCha tamanhoCha;
	
	public static void main(String[] args) {
		CorpoDeMetodoEnums corpoEnums = new CorpoDeMetodoEnums();
		corpoEnums.tamanhoCha = TamanhoCha.PEQUENO;
		
		CorpoDeMetodoEnums corpoEnumsCha = new CorpoDeMetodoEnums();
		corpoEnumsCha.tamanhoCha = TamanhoCha.MEDIO;
		
		System.out.println(corpoEnumsCha.tamanhoCha.tipoCafe());
		System.out.println(corpoEnums.tamanhoCha.tipoCafe());
		
	}
}

Como que ele sabe q o tipo C é pro MEDIO? A ordem q eu dou um tipoCafe() faz diferença?..Tipo, primeiro ele busca dentro do corpo de método da constante e depois busca ‘dentro’ do enum?

Att.

edit: me parece que o metodo tipoCafe() com retorno tipo = “A”, está declarado para a constante MEDIO e sempre vai me retornar A, estou certo?

case eu quisesse declarar outro corpo de metodo da constante GRANDE ( supondo q eu adicionasse ), como que iria ficar? Eu preciso terminar o método com “;” do médio?

Com relação a sua dúvida de retornar A para tipo médio, ele retorna pq vc “sobreescreveu” o método tipoCafe para a constante MEDIO… isso está correto…

[]'s

Exemplo com novo tipo:

enum TamanhoCha {
	PEQUENO(8), MEDIO(10) {
		public String tipoCafe() {
			return "Tipo A";
		}
	},
	GRANDE(12) {
		public String tipoCafe() {
			return "Tipo GRANDE";
		}
	};

	private int tamanho;

	// construtor
	TamanhoCha(int tamanho) {
		this.tamanho = tamanho;
	}

	// retorna tamanho
	public int getTamanho() {
		return tamanho;
	}

	// retorna o tipo do cafe para PEQUEENO???
	public String tipoCafe() {
		return "Tipo C";
	}
}

public class CorpoDeMetodoEnum {
	TamanhoCha tamanhoCha;

	public static void main(String[] args) {
		CorpoDeMetodoEnum corpoEnums = new CorpoDeMetodoEnum();
		corpoEnums.tamanhoCha = TamanhoCha.PEQUENO;

		System.out.println(corpoEnums.tamanhoCha.tipoCafe());

		CorpoDeMetodoEnum corpoEnumsCha = new CorpoDeMetodoEnum();
		corpoEnumsCha.tamanhoCha = TamanhoCha.MEDIO;

		System.out.println(corpoEnumsCha.tamanhoCha.tipoCafe());

		CorpoDeMetodoEnum corpoEnumsGrande = new CorpoDeMetodoEnum();
		corpoEnumsGrande.tamanhoCha = TamanhoCha.GRANDE;

		System.out.println(corpoEnumsGrande.tamanhoCha.tipoCafe());

	}

espero te ajudado

[]'s

Opa…mto obrigado!!