Jogo
Queremos então:
terminou
. Para isso:
terminou
na classe Jogo
,Então, temos que:
- definir o método
terminou
comoabstract
na classeJogo
,- e, por isso, definir a classe
Jogo
comoabstract
, também.
Na definição de uma classe, a palavra abstract
imediatamente antes da palavra class
indica que a classe é abstrata. Na definição de um método, a palavra abstract
imediatamente antes do tipo de retorno do método indica que o método é abstrato, ou seja, não tem implementação nessa classe.
ximport java.util.ArrayList;
import java.util.List;
/**
* Classe abstrata cujos objetos representam jogos
* @author Isabel Nunes
*/
public abstract class Jogo implements Ganhavel {
// atributos que definem este jogo:
// Designacao
private String designacao
// A coleccao dos jogadores
private ArrayList<Jogador> jogadores;
/**
* Inicializar um jogo.
* @param designacao A designacao do jogo.
* @requires designacao != null
*/
public Jogo (String designacao) {
this.designacao = designacao;
this.jogadores = new ArrayList<Jogador>();
}
... // Faltam aqui metodos. Ver atras.
/**
* Este jogo jah terminou?
*/
public abstract boolean terminou ();
... // Faltam aqui metodos. Ver atras.
}
Se uma classe
A
é declarada como abstrata,
A
não pode ter instâncias;A
pode e deve ter subclasses concretas, que implementarão o que ficou por implementar emA
;A
pode definir atributos, construtores (que têm como papel inicializar esses atributos e são chamados pelos construtores das subclasses) e métodos não abstratos;A
pode estender uma classe, que tanto pode ser concreta como abstrata;A
pode implementar um interface.
Se um método
m
é definido comoabstract
numa classeA
,
- o método
m
representa um serviço que todos os objetos do tipoA
têm que oferecer (lembre que qualquer subtipo deA
é também do tipoA
);- logo, todas as subclasses concretas (não abstratas) de
A
têm que implementar o métodom
porque qualquer subclasse deA
define um subtipo deA
.
Com a classe Jogo
definida como abstrata e o seu método terminou
também, o programa ExemploNaoExisteMetodo
acima já compila bem e a sua execução imprime o seguinte no standard output:
xxxxxxxxxx
Jogo Spiral terminou
Jogo Harvest Kingdom terminou
Anterior: 16. Classes abstratas
Seguinte: 16.2. Métodos template