Classes Internas (Java)/Gato e Estômago/Classe interna a um método

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"); }
 
   // ERRO: "EstômagoDeGato" está definida apenas em "comer"
   // public Estômago getEstômago() { return new EstômagoDeGato(); }
 
   public boolean temFome() { return _comFome; }
 
   public void comer() {
 
     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();
   }
 
 }

Teste

 public class Teste4 {
   public static void main(String[] args) {
     Gato g = new Gato();
     System.out.println("Gato com fome: " + g.temFome());
     g.comer();
     System.out.println("Gato com fome: " + g.temFome());
   }
 }

Resultados

 $ java Teste4
 Gato criado
 Gato com fome: true
 Gato: a comer...
 Estômago criado
 Digestão
 Bola de pêlo... ghh, gaah, ghh... eliminada
 Gato com fome: false
 $ ls
 Estômago.java Estômago.class
 Gato.java Gato.class Gato$1EstômagoDeGato.class
 Teste4.java Teste4.class