One reason is that objects have different sizes and different internal structures, even if they are derived from the same base class. As long as they reside in memory, you can simply allocate space for them dynamically as needed. However, it is awkward to store different objects in the same file unless you are content with simple sequential access. You can't usefully store pointers in a file. At best you can only simulate them with file offsets, database keys, or various other gimmicks.
Pointers are likely to be involved in another form as well.
It is by following these pointers that the runtime system supports polymorphism. When you store objects in a file, there's no simple way to store these pointers with it. There are ways to solve these problems, but there is no simple standard way. You either code your own clever tricks or buy somebody else's proprietary clever tricks, such as an OO database. At first, multiple inheritance is an appealing idea, because things in the real world belong to multiple categories.