In general case, not. Actually, that's why, in addition to compatibility, COM components should support versioning.
Now, why? To understand it, you should consider layout of memory pointed by interface pointer and two side: a component and using code. Here is the illustration. From C++ perspective, consider it as pseudo-code:
interface A {
MethodOne();
}
interface A {
MethodOne();
MethodTwo();
}
A a =
a.MethodOne();
A a =
a.MethodOne();
a.MethodTwo();
Are you getting the idea?
—SA