//=================================================================// abstract class SuperClass { // HOOFDPROGRAMMA // Wat is de output van dit programma?? public static void main( String[] args) { SuperClass obj1 = new ClassA(null); SuperClass obj2 = new ClassB(obj1, 4); SuperClass obj3 = new ClassC(obj2); obj1.setNext(obj3); // Deel 1 SuperClass obj = obj1; do{ System.out.print(obj+" - "); // tip: de toString() vd klasse wordt opgeroepen obj = obj.next(); } while (obj != obj1); System.out.println(); // Deel 2 System.out.print("Result of obj.F1 : "); obj1.F1(0); System.out.println(); } // ========================== SuperClass =============================// SuperClass mNext; SuperClass(SuperClass next){ mNext = next; } SuperClass next(){ return mNext; } void setNext(SuperClass next){ mNext = next; } void F1(int x){ mNext.F1(F2(x)); } abstract int F2(int x); } //========================== ClassA =============================// class ClassA extends SuperClass{ ClassA(SuperClass next){ super(next); } int F2(int x){ return x+1; } public String toString(){ return "A"; } } //========================== ClassB =============================// class ClassB extends SuperClass{ int mFactor; public ClassB(SuperClass next, int factor){ super(next); mFactor = factor; } int F2(int x) { return x*mFactor; } public String toString(){ return "B"+mFactor; } } //========================== ClassC =============================// class ClassC extends ClassB{ ClassC(SuperClass next){ super(next, 3); } void F1(int x){ System.out.print(F2(x)); } public String toString(){ return super.toString()+"C"; } }