SLIDE 2 5 CISC 124, winter 2014, Set 6: Inner Classes
More Capabilities of Inner Classes
public class SlideDemo { private int a; public InnerClass subObject; public class InnerClass { public int b; public int sum() { return a + b; } // end sum } // end class InnerClass // constructor public SlideDemo(int aval, int bval) { a = aval; subObject = new InnerClass(); subObject.b = bval; } // end constructor public static void main(String args[]) { SlideDemo tester = new SlideDemo(7, 5); System.out.println(tester.subObject.sum()); tester.a = 4; tester.subObject.b = 3; System.out.println(tester.subObject.sum()); } // end main } // end class SlideDemo
reference to a in enclosing object
6 CISC 124, winter 2014, Set 6: Inner Classes
public class OuterClass { .... public InnerClass subObject; public class InnerClass { public int b; .... } // end class InnerClass } // end class OuterClass
Limits on Inner Class Use
an outside user can reference the inner object:
OuterClass x = new OuterClass(); int y = x.subObject.b;
an outside user may not create an instance of InnerClass:
InnerClass y = new OuterClass.InnerClass(); // illegal
InnerClass objects may only exist inside OuterClass objects
7 CISC 124, winter 2014, Set 6: Inner Classes
Our mental picture of the objects:
Implementation Details
a: 13 subObject b: 7
subObject is "inside" enclosing object
How Java really does it:
a: 13 subObject b: 7 pointer from inner object to enclosing object
8 CISC 124, winter 2014, Set 6: Inner Classes
public class OuterClass { private int a; public InnerClass subObject; public static class InnerClass { public int b; public int sum() { return a + b; } // end sum } // end class InnerClass // main for testing public static void main(String args[]) { OuterClass tester = new OuterClass(); tester.a = 7; tester.subObject.b = 5; System.out.println(tester.subObject.sum()); } // end main } // end class OuterClass
Static Nested Classes
reference to members of enclosing class is illegal pointer from "inner" object to "outer" object is gone inner class with "static" called a "nested class"