abstract class Base {
   abstract void f( );           // equivalente a virtual pura en C++
}

class Derivado extends Base {
   void f( ) {
      System.out.println("f de Derivado");
   }
}

void main( ) {
   Base b = new Base( );         // error: Base es abstracta al tener funciones abstractas (virtuales puras): no se puede crear un objeto de ese tipo
   Base b = new Derivado( );     // ok
   b.f( );                       // ok, mecanismo virtual llamará a f de Derivado
}