I just start out with an example, that explains it best:
public abstract class A{ static String str; } public class B extends A{ public B(){
only one instance of static variable is present in the system.
static variable will load into the system in the start before class is loaded.
reason both time abc is printed is because you set the value of str as abc in the last.