A inner clas has a special relation between one instance of the containing class and its own instance.
With new Inner() the first answer can accomplish this rule because within the method in line 3 exits the needed instance of Outer. (called this)
In the other hand, a static method (line 8) doesn't know instances so answer B is wrong. (If answer B was: o.new Inner(); or new Outer().new Inner(); then B would be rigt too)
Answer c hasn't got appropiate syntax.
Answer d is made thinking about static inner classes.