ClassA <-- ClassC.ClassC(java.lang.String) <-- ClassC.anotherMethodOfC() <-- ClassC.lastA <-- ClassC.methodOfC(ClassA) <-- ClassD.main(java.lang.String[]) --> java.lang.Object * ClassA(int) --> ClassA.size --> ClassA.someB --> ClassB <-- ClassD.main(java.lang.String[]) --> java.lang.Object.Object() * methodOfA(ClassB) --> ClassA.someB --> ClassB --> ClassB.somethingC --> ClassC --> ClassC.ClassC(java.lang.String) <-- ClassC.anotherMethodOfC() <-- ClassC.methodOfC(ClassA) <-- ClassD.main(java.lang.String[]) --> java.lang.String * size <-- ClassA.ClassA(int) someB <-- ClassA.ClassA(int) <-- ClassA.methodOfA(ClassB) --> ClassB ClassB <-- ClassA.ClassA(int) <-- ClassA.methodOfA(ClassB) <-- ClassA.someB <-- ClassC.anotherMethodOfC() <-- ClassC.methodOfC(ClassA) <-- ClassD.main(java.lang.String[]) --> java.lang.Object * ClassB(ClassC) --> ClassB.somethingC --> ClassC <-- ClassD.main(java.lang.String[]) --> java.lang.Object.Object() * somethingC <-- ClassA.methodOfA(ClassB) <-- ClassB.ClassB(ClassC) --> ClassC ClassC <-- ClassA.methodOfA(ClassB) <-- ClassB.ClassB(ClassC) <-- ClassB.somethingC <-- ClassD.main(java.lang.String[]) --> java.lang.Object * ClassC(java.lang.String) --> ClassA <-- ClassA.methodOfA(ClassB) --> ClassC.lastA --> ClassC.name <-- ClassD.main(java.lang.String[]) --> java.lang.Object.Object() * --> java.lang.String * anotherMethodOfC() --> ClassA --> ClassA.methodOfA(ClassB) --> ClassB --> ClassC.lastA lastA --> ClassA <-- ClassC.ClassC(java.lang.String) <-- ClassC.anotherMethodOfC() <-- ClassC.methodOfC(ClassA) methodOfC(ClassA) --> ClassA --> ClassA.methodOfA(ClassB) --> ClassB --> ClassC.lastA <-- ClassD.main(java.lang.String[]) name <-- ClassC.ClassC(java.lang.String) --> java.lang.String * ClassD --> java.lang.Object * ClassD() --> java.lang.Object.Object() * main(java.lang.String[]) --> ClassA --> ClassA.ClassA(int) --> ClassA.methodOfA(ClassB) --> ClassB --> ClassB.ClassB(ClassC) --> ClassC --> ClassC.ClassC(java.lang.String) --> ClassC.methodOfC(ClassA) --> java.io.PrintStream * --> java.io.PrintStream.println(java.lang.String) * --> java.lang.String * --> java.lang.System.out * java.io * PrintStream * <-- ClassD.main(java.lang.String[]) println(java.lang.String) * <-- ClassD.main(java.lang.String[]) java.lang * Object * <-- ClassA <-- ClassB <-- ClassC <-- ClassD Object() * <-- ClassA.ClassA(int) <-- ClassB.ClassB(ClassC) <-- ClassC.ClassC(java.lang.String) <-- ClassD.ClassD() String * <-- ClassA.methodOfA(ClassB) <-- ClassC.ClassC(java.lang.String) <-- ClassC.name <-- ClassD.main(java.lang.String[]) System * out * <-- ClassD.main(java.lang.String[])