A interface Estômago
(implementada pela classe interna) é como anteriormente.
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(); } }
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()); } }
$ 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