// P224.java // OOP from p 224 of EOPL II import java.io.*; import java.util.*; class A { int i; int j; public A() { System.out.println("A instance is created"); initialize(); } void initialize () { System.out.println("A is initialized"); } Vector setup() { i = 15; j = 20; Vector v = new Vector(); v.add(new Integer(50)); return v; } Vector f() { return this.g(); } Vector g() { Vector v = new Vector(); v.add(new Integer(i + j)); return v; } } class B extends A { int j; int k; public B() { super(); System.out.println("B instance is created"); } Vector setup() { j = 100; k = 200; super.setup(); return this.h(); } Vector g() { Vector v = new Vector(); v.add(new Integer(i)); v.add(new Integer(j)); v.add(new Integer(k)); return v; } Vector h() { return super.g(); } } class C extends B { public C() { System.out.println("C instance is created"); } Vector g() { return super.h(); } Vector h() { Vector v = new Vector(); v.add(new Integer(k + j)); return v; } } public class P224 { static Vector p(A o) { Vector u = o.setup(); Vector v = o.g(); Vector w = o.f(); Vector z = new Vector(); z.add(u); z.add(v); z.add(w); return z; } public static void main(String[] args) { Vector x = p(new A()); Vector y = p(new B()); Vector z = p(new C()); Vector w = new Vector(); w.add(x); w.add(y); w.add(z); System.out.println(x); System.out.println(y); System.out.println(z); System.out.println(w); } } /* [[50], [35], [35]] [[35], [15, 100, 200], [15, 100, 200]] [[300], [35], [35]] [[[50], [35], [35]], [[35], [15, 100, 200], [15, 100, 200]], [[300], [35], [35]]] */