/* Test virtual method calls */
class A {
   void override() {
      write(0);
      writeln();
   }
	void base() {
		write(1);
		writeln();
	}
}

class B extends A {
   void override() {
		write(2);
		writeln();
	}
	void sub() {
		write(3);
		writeln();
	}
}

class Main {
   void main() {
		A a;
		B b;
		
		a = null;
		b = null;

		a = new A();
		a.base();
		a.override();

		b = new B();
		b.base();
		b.override();
		b.sub();

		a = b;
		a.base();
		a.override();
		
      b.base();
      b.override();
      b.sub();
      
	}
}
