(* Test: NEW of OBJECTs with default and non-default fields & methods *) MODULE Main; TYPE obj1 = OBJECT a: [1..9]; METHODS p (i: INTEGER) := P1; END; obj2 = obj1 OBJECT b: INTEGER; METHODS p := P2; q (r:REAL) := Q2; END; obj3 = obj2 OBJECT END; PROCEDURE P1 (self: obj1; x: INTEGER) = BEGIN x := self.a; self.p (x); END P1; PROCEDURE P2 (self: obj2; x: INTEGER) = BEGIN x := self.a + self.b; self.p (x); END P2; PROCEDURE Q2 (self: obj2; r: REAL) = BEGIN self.a := 4; self.q (3.14159); END Q2; BEGIN VAR o1: obj1; o2: obj2; o3: obj3; i, j: INTEGER; BEGIN o1 := NEW (obj1); o2 := NEW (obj2); o3 := NEW (obj3); o1 := NEW (obj1, a := i+j); o2 := NEW (obj1, p := P1); o3 := NEW (obj3, q := Q2, a := 4); END; END Main.