/** * This code is from the book: * Winder, R and Roberts, G (1998) * Developing Java Software * John Wiley & Sons. * It is copyright (c) 1997 Russel Winder * and Graham Roberts. */ class A{ public class B{ public class C{ public void test(){ System.out.println(name); System.out.println(B.this.name); System.out.println(A.this.name); } private String name = "C"; } public void test(){ System.out.println(name); System.out.println(A.this.name); C c = new C(); c.test(); // Can do this as method already has // member object reference to an A B b = new B(); // b.test();//Watch out infinite recursion!! } private String name = "B"; } public void test(){ System.out.println(name); B b = new B(); b.test(); // Can't do this (no B object specified) // B.C c = new C(); // Error // Can do this B.C c = b.new C(); c.test(); } private String name = "A"; } class l1Memb3{//Class7 public static void main(String[] args){ A a = new A(); // Cannot create a member class object // without an A object // A.B = new B(); // Error // Can do this. // Note the form of the new expression A.B b = a.new B(); b.test(); // Can also do this to create // a C object using a B object A.B.C c = b.new C(); c.test(); // Cannot do this // as a C object needs a B object // A.B.C c1 = a.new C(); // Error } } /******** sample compilation & run ******* # javac l1Memb3.java # java l1Memb3 B A C B A C B A # ******************************************/