InnerLocalAnonymous.java


import java.io.*;

public class InnerLocalAnonymous {
   public static void main (String[] args) throws IOException{
   
      OuterA o = new OuterA();
      
      Keeper k1 = o.getKeeper1(1);
      Keeper k2 = o.getKeeper2(2);
      Keeper k3 = o.getKeeper3(3);
      Keeper k4 = o.getKeeper4(4);
      Keeper k5 = o.getKeeper5(5);
      
      System.out.println(k1.getInt());
      System.out.println(k2.getInt());
      System.out.println(k3.getInt());
      System.out.println(k4.getInt());
      System.out.println(k5.getInt());
      
      // m() does not exist to outside world of
      // getKeeper5(). not compilable 
      // System.out.println(k5.m());
      
      System.in.read();
   }
}

class OuterA {
   Keeper getKeeper1(final int i) {
      //Local class
      class MyKeeper1 implements Keeper {
         public int getInt() {
            return i;
         }
      }
      // return local class instance
      return new MyKeeper1();
   }
   
   Keeper getKeeper2(int i) {
      // return inner class instance
      return new MyKeeper2(i);
   }
   
   // inner class
   class MyKeeper2 implements Keeper {
      final int j;
      MyKeeper2(int i) {j=i;}
      public int getInt() {
         return j;
      }
   }
   
   Keeper getKeeper3(final int k) {
      // return anonymous class instance
      return new MyKeeper2(k){
         public int getInt() {
            return j + 4;
         }
      };
   }
   
   Keeper getKeeper4(final int i) {
      // return anonymous class instance
      // but different than getKeeper3()
      return new Keeper(){
         public int getInt() {
            return i;
         }
      };
   }
   
   Keeper getKeeper5(final int i) {
      // return anonymous class instance
      // but different than getKeeper3() and getKeeper3()
      // added a method noone else knows.
      return new Keeper(){
         public int getInt() {
            return m();
         }
         // m() does not exist outside getKeeper5()
         public int m() {
            return i;
         }
      };
   }
}

// The common interface
interface Keeper {
   int getInt();
}

Last updated: 12-10-2002
Copyright © 1999 - 2003 Roseanne Zhang, All Rights Reserved
[ Java certification page] [ SCJP FAQ] [ JavaChina]