class A
  private:
    var k : integer;
  public:
    proc get_A() : integer    
      begin
      return self.k;
      end
    proc set( k : integer )
      begin
      self.k = k;
      end
    proc init()               
      begin
      self.set(0);
      end
end
 
 
class B subclassOf A
  private:
    var k : integer;
  public:
    proc get_B() : integer    
      begin
      return self.k;
      end
    proc init()
      begin
      super.init();
      self.k = 2;
      end
end
 
class C subclassOf A
  public:
     proc get_A() : integer
       begin
       return 0;
       end
end
 
class Program
  public:
    proc run()
        var
          a : A;
          b : B;
          c : C;
      begin
      b = B.new();
      write( b.get_B() ); 
      a = b;
      write( a.get_A() ); 
      write( b.get_A() );  // vai para método get_A da classe A
      a = c;

      write( a.get_A() );  // vai para o método get_A da classe A

      c = C.new();
      write( c.get_A() );  // vai para método get_A da classe C
      end
end