13.4. O interface Ganhavel

Se for do nosso interesse ter programas

e, nesses programas,

então devemos

O seguinte interface define um tipo de dados – Ganhavel – que engloba um conjunto de capacidades que um objeto pode ter:

Repare que a nossa classe Jogo da secção 11.8 já implementa todos estes métodos. No entanto, como Jogo não implementa Ganhavel, não seria possível usar um objeto do tipo Jogo para instanciar um parâmetro do tipo Ganhavel, nem atribuir a sua referência a uma variável do tipo Ganhavel.

Suponha que numa qualquer classe cliente de Ganhavel, definimos o método imprimeInformacaoParticipante abaixo listado, com um parâmetro do tipo Ganhavel e uma String, que invoca uma série de métodos sobre o objeto Ganhavel imprimindo a informação resultante no standard output.

Para podermos usar um objeto do tipo Jogo como valor para o parâmetro g do tipo Ganhavel, teremos que declarar, na classe Jogo, que esta implementa o interface Ganhavel:

 

Vamos ainda supor que temos uma classe ConcursoPublico que também implementa o interface Ganhavel.

O seguinte programa trabalha com dois objetos – um do tipo Jogo, outro do tipo ConcursoPublico – que são também do tipo Ganhavel e, como tal, podem ser usados na invocação do método imprimeInformacaoParticipante para instanciar o seu primeiro parâmetro.

Quando executado, este programa produz o seguinte output:

 

Repare que, ao termos definido o parâmetro do método com tipo Ganhavel em vez de Jogo, obtivemos um método cuja utilização é mais abrangente, pois esse parâmetro pode ser instanciado por qualquer objeto cujo tipo real seja subtipo de Ganhavel. Se o tipo do parâmetro fosse Jogo, estaríamos a reduzir a aplicabilidade do método a objetos do tipo Jogo.

 


 

Anterior: 13.3. Subtipos

Seguinte: 13.5. O interface genérico List