trait Printable // putin ca o interfata sau o clasa abstracta { var log : string method Print() } class Cell extends Printable { var x : int method Print() { print log; print x; } } // nu pot extinde o clasa // class Cell' extends Cell // { // } class Rational extends Printable { var n : int var m : int method Print() { print log; print n, "/", m; } } // nu exista protected, public, private trait Complex { method getX() returns (r : real) method getY() returns (r : real) method getAngle() returns (r : real) method getAmplitude() returns (r : real) } class Complex1 extends Complex { var x : real var y : real constructor() { x := 0 as real; y := 0 as real; } method getX() returns (r : real) { return x; } method getY() returns (r : real) { return y; } method getAngle() returns (r : real) { return 0.0; // ar trebui calculat mai complicat } method getAmplitude() returns (r : real) { return 0.0; // ar trebui calculat mai complicat } } class Complex2 extends Complex { var unghi : real var magnitudine : real constructor() { unghi := 0 as real; magnitudine := 0 as real; } method getX() returns (r : real) { return 0 as real; //return magnitudine * cos(unghi); } method getY() returns (r : real) { return 0 as real; // return y; } method getAngle() returns (r : real) { return unghi; } method getAmplitude() returns (r : real) { return magnitudine; } } method exempluClient() { var c : Complex := new Complex1(); var d : Complex := new Complex2(); var a := c.getX(); var b := d.getY(); }