Actually, the fact that these variables refer to null doesn't make any difference whatsoever. Let's go through the various lines and determine why you're getting errors:
This line compiles fine. The reason for that is that, even though A does not implement I1, some subclass of A might, which might make this a legal cast. Therefore, this line will compile correctly. Check out
my blog entry for more details on this case.
This case is not allowed because a2, which is of type A does not implement I1. Therefore, the compiler knows that this assignment makes no sense and flags it with an error.
This is also illegal because a3, which is of type A, can't possibly refer to an object of type B as A and B are not related. You can also look at
my blog entry for more information, if you'd like.
Again, this doesn't work because A and B are not related. This is essentially the same case as the one above.
I hope that helps,
Corey