package technology.direct.dao; public class CallInstanceOuterClassDAO { // create an array private final static int SIZE = 15; private int[] arrayOfInts = new int[SIZE]; public CallInstanceOuterClassDAO() { // fill the array with ascending integer values for (int i = 0; i < SIZE; i++) { arrayOfInts[i] = i; } } public void printEven() { // print out values of even indices of the array CallInstanceInnerClassDAO iterator = this.new CallInstanceInnerClassDAO(); while (iterator.hasNext()) { System.out.println(iterator.getNext() + " "); } } public void callConstructorInnerClass() { CallInstanceOuterClassDAO.CallInstanceInnerClassDAO i = new CallInstanceOuterClassDAO.CallInstanceInnerClassDAO(); } public void callDefaultConstructorInnerClass() { CallInstanceOuterClassDAO.CallInstanceInnerClassDAO i = new CallInstanceOuterClassDAO.CallInstanceInnerClassDAO(); } // inner class implements the Iterator pattern public class CallInstanceInnerClassDAO { // start stepping through the array from the beginning private int next = 0; private TestConstructorCallOfInnerClass otherInnerClass; public String text; public CallInstanceInnerClassDAO() { this.text = "s"; } public CallInstanceInnerClassDAO(String s) { this.text = s; } public CallInstanceInnerClassDAO(TestConstructorCallOfInnerClass otherInner) { this.otherInnerClass = otherInner; } public boolean hasNext() { return true ; } public int getNext() { // record a value of an even index of the array int retValue = arrayOfInts[next]; //get the next even element next += 2; return retValue; } } public enum InnerEnumeration { ONE,TWO,THREE,FOUR; } public interface CallInstanceInnerInterfaceDAO { public void InterfaceMethod(); } public static class StaticNestedClass { CallInstanceOuterClassDAO outer; String var; public StaticNestedClass() { this.var = "s"; } public StaticNestedClass(String var) { this.var = var; } public CallInstanceOuterClassDAO getOuter() { return outer; } } public class TestConstructorCallOfInnerClass { CallInstanceOuterClassDAO.CallInstanceInnerClassDAO i = new CallInstanceOuterClassDAO.CallInstanceInnerClassDAO(this); } }