Classes Internas (Java)/Gato e Estômago/Classe interna a um bloco

From Wiki**3

< Classes Internas (Java)‎ | Gato e Estômago

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