Technically, enemy classes can be done nearly was well though a single function that has the sole purpose of being a massive swtich block to send the AI where it needs to go, but in low level languages such as C, you can do the same thing with a function pointer. It wouldn't work as well for saving, but you could swap out one AI for another at runtime with no speed penalty at all.
Still, one nifty feature often has consequences. If you CAN use function pointers, you most certainly would have to deal with regular pointers, and all of the potential crashes, bugs, and memory leaks.
Some languages have something similar to a function pointer but diffrent. I know that Actionscript's "onDragOver=function(){..." sort of system would be practically the same thing, only as a high-level solution. Probably many other high-level languages would have a feature like that, and an actual function pointer, though same functionality, would only be found at low levels where storing the numeric memory address of a function is a good tradeoff(efficiency and crashes if the programmer messes up, compared to a slower system that likely uses a string or internal ID as a refrence. Actually, an internal ID would be very similar to the whole massive switch block, except that the programmer wouldn't need to bother knowing that it even exists...)