Classes Internas (Java)/Gato e Estômago/Classe interna a um bloco
From Wiki**3
A interface Estômago (implementada pela classe interna) é como anteriormente.
Classe Gato
public class Gato {
private boolean _comFome = true;
Gato() { System.out.println("Gato criado"); }
public void caçar() { _comFome = true; }
public boolean temFome() { return _comFome; }
public void comer() {
if (_comFome) {
class EstômagoDeGato implements Estômago {
private double _ph = 1.4;
private boolean _comBolaDePelo = false;
EstômagoDeGato() { System.out.println("Estômago criado"); }
public void digere() {
System.out.println("Digestão");
}
void eliminaBolaDePêlo() {
System.out.println("Bola de pêlo... ghh, gaah, ghh... eliminada");
_comFome = false;
}
}
System.out.println("Gato: a comer...");
EstômagoDeGato e = new EstômagoDeGato();
e.digere();
e.eliminaBolaDePêlo();
} // fim do "if"
// Estômago = new EstômagoDeGato(); // erro: "EstômagoDeGato" não está; definida
} // fim do método "comer"
}
Teste
public class Teste5 {
public static void main(String[] args) {
Gato g = new Gato();
System.out.println("Gato com fome (antes de comer): " + g.temFome());
g.comer();
System.out.println("Gato com fome (depois de comer): " + g.temFome());
g.comer();
System.out.println("Gato com fome (depois de comer): " + g.temFome());
g.caçar();
System.out.println("Gato com fome (depois de caçar): " + g.temFome());
g.comer();
System.out.println("Gato com fome (depois de comer): " + g.temFome());
}
}
Resultados
$ java Teste5 Gato criado Gato com fome (antes de comer): true Gato: a comer... Estômago criado Digestão Bola de pêlo... ghh, gaah, ghh... eliminada Gato com fome (depois de comer): false Gato com fome (depois de comer): false Gato com fome (depois de caçar): true Gato: a comer... Estômago criado Digestão Bola de pêlo... ghh, gaah, ghh... eliminada Gato com fome (depois de comer): false
$ ls Estômago.java Estômago.class Gato.java Gato.class Gato$1EstômagoDeGato.class Teste5.java Teste5.class