The problem with that approach is in passing arguments to the functions. If any of the functions take arguments or return a different shape/type of result set, there's no way to account for that within the declaration of the ancestor class.
Unless you want to do declare them all as "any", and declare it with an unbounded array as the argument...
of_doSomething( any args[] ) returns any
Then your code would be something like:
any l_args[]
l_arg[1] = ls_string
l_arg[2] = li_int
l_arg[3] = ld_date
lnv_exec.of_doSomething( l_args )
-Paul-