Hi Umashankar,
I can remember this Question

,, i did this when i was preparing for
SCJP 
. It is a very good Q which tests whether the candidate knows the mechanics of "instanceof" operator
Ok. I will explain how the answer was c)
Answer a) --> wrong ! since obj can be an object created from the class C, and still obj instanceof B returns true !! (Since class C extends Class B)
Answer b) --> if obj instanceof A evaluates to true, that means the obj can be an object created from any of the classes A,B,C or D . For obj instanceof C to be false , then obj can be an object created from any of the classes A, B or D. so for "obj instanceof A && !(obj instanceof C)" to evaluate to true, then obj can be an object created from either A,B or D. So this answer is also wrong !!
Answer c) --> if obj instanceof B evaluates to true, then obj can be an object created by either class B or class C. and for "obj instanceof C" to be false, then obj should be an object created by A,B or D . hence, for obj instanceof B && !(obj instanceof C)
to be true , the object ob must be created from class B
i think u can follow my argument style similarly for the other options

Good luck.
Cheers
Mahen