Static variables can't be local why ??

Because  In C and C++, you can have local static variables. The scope of such variables is the method they are defined in, but they continue to exist when the method ends. Next time the same method is called, such a variable will still have the value it had when the method was called the previous time. 
 Although Java took a number of features from C++, it isn't the same as C++, and this feature was left out. Probably the designers of the Java language didn't think this was a very useful feature to borrow from C++. So, This is not a feature that you really need, and it can be hard to understand. 


We can't override a static method by a non-static method why ??

Have a look at the below code...

class Parent
{
                   static void m1()
                           {
                                    System.out.println("static m1 in Test");
                            }
}

class Child extends Parent
{
                      void  m1()
                            {
                                      System.out.println("non static m1 in Test1");
                            }
}

class Demo
{
                  public static void main(String...args)
                            {
                                        Parent obj = new Child();
                                         obj.m1();          // Give Attention on This line

                            }
}

Now, picture is clear i think. Suppose compiler compiles this code without any problem then at compile time compiler checks the m1 method's availability and type in Parent class which is static Hence, changes obj to Parent (class name) .Its okay for now. Now you have your your byte code BUT at run time when JVM checks the object type it will call m1 method in the Child class but now the problem is obj (Refrence variable) have changed to class name Which is Parent (class name) and m1 method in the Child class is non-static then there will be a strange condition.
I think now it is clear that we can't override a static method by a non-static method & vice-versa .  

Why we always declare main method public ?

Because the rules of the JVM say that

Can We overload main method ??

Point here is that main() is no different from any other method.