int i = 20; // why doesnt not it give error,as it is over riding the interface variable.
You cannot override interface/class variable in subclass or implementing class.
Only methods can be overridden.
Hence, variable "i" is different in interface and class.
In your example variable "i" for Interface is static final variable which is accessible globally while variable "i" in Abstract class is accessible only by the class.