Assuming the implementations are otherwise identical, whether or not the classes implement interface(s) will not significantly alter runtime memory requirements.
Looking specifically at your code
In1 i1 = new c1();
i1 = new c2();
and
X1 x1 = new x1();
X2 x2 = new x2();
In the first block, your instance of c1 is no longer referenced once i1 = new c2() is run. That makes it eligible for garbage collection. That code block is not the same as the second code block, because the second code block maintains a reference to both allocated objects.
However, if you rewrite your first code block as
In1 i1a = new c1();
In1 i1b = new c2();
your memory requirements are again exactly the same with or without interfaces, because you hold a reference to the objects for the same duration.
UPDATE
If you mark methods of your class final, I believe you will save slightly on memory allocation due to the fact that a vtable is not needed. Methods declared in interfaces cannot be marked final.