public class ClassA { int size; private ClassB someB; ClassA(int size){ this.size = size; this.someB = null; } void methodOfA(ClassB g){ someB = g; someB.somethingC = new ClassC("aaa"); } } public class ClassB { ClassC somethingC; ClassB(ClassC anInitialC) { somethingC = anInitialC; } } public class ClassC { String name; private ClassA lastA; ClassC(String name){ this.name=name; this.lastA = null; } void methodOfC(ClassA g){ lastA = g; lastA.methodOfA(null); } void anotherMethodOfC(){ if(lastA !=null) lastA.methodOfA(null); } } public class ClassD { public static void main(String[] args) { System.out.println("Hello world!"); ClassA a1 = new ClassA(4); ClassC c1 = new ClassC("abc"); ClassB b1 = new ClassB(c1); a1.methodOfA(b1); c1.methodOfC(a1); } }