Porque eu não consigo utilizar o método getValue(int bid) do corpo da constante NOTRUMP, se não declarar o mesmo dentro do enum(linha 14) ?
Ou seja tenho que declarar o método duas vezes e mesmo assim o retorno vai ser o equivalente ao método que está no corpo da constante e não o que está fora ! :shock:
Mas o enum é mesmo um conjunto de objetos de mesma assinatura. Portanto, você teria que declarar o método da linha 14, nem que fosse apenas como abstract.
E o que eu acho mais estranho é que tipo sempre o retorno vai ser do método que estiver dentro do corpo da constante…
Se eu to entendendo então o método que fica dentro do enum, é uma “ponte” para poder utilizar o método da constante ? Já que não é retornado nada desse método…
É isso ?
V
ViniGodoy
Isso é polimorfismo.
O enum nada mais é do que um conjunto de classes que herdam Suits. O Java implicitamente cria uma classe anônima para o NOTRUMPS, que implementa Suits.
Seria mais ou menos o equivalmente a isso aqui (é assim que se simulava esses enums antes do Java 5):
Mas então no caso do método não ser abstract, ele ter um corpo dentro do enum, sendo que na verdade a implementação que será usada é do corpo da constante…
Nesse caso, que utilidade tem o corpo do método que está dentro do escopo de enum? Nenhuma?
V
ViniGodoy
Nenhuma. Vc jamais conseguiria fazer o cast para a inner class anônima.
Você poderia usa-lo no máximo de suporte a outros métodos, que fossem visíveis.