public interface Drawable : Object {

	public abstract void draw ();
}

public abstract class Figure : Object, Drawable {
	public virtual void draw () {
		stdout.printf ("Figure:draw() called\n");
	}
}

public class Circle : Figure {
	public override void draw () {
		stdout.printf ("Circle:draw() called\n");
	}
}

public class ColorCircle : Circle {
	public override void draw () {
		stdout.printf ("ColorCircle:draw() called\n");
	}
}

void main () {
	var cc = new ColorCircle ();
	cc.draw ();

	Circle c = cc;
	c.draw ();

	Figure f = c;
	f.draw ();

	Drawable d = f;
	d.draw ();
}
