Why do these two code samples produce different outputs?

后端 未结 5 984
离开以前
离开以前 2021-01-18 02:57

Sample 1:

 class Animal {
     public static void saySomething() { System.out.print(\" Gurrr!\"); 
   }
 }
 class Cow extends Animal {
    public static void         


        
5条回答
  •  悲哀的现实
    2021-01-18 03:24

    static methods are bound to their class at compile time and cannot be used polymorphically. When you declare a "static" method on Animal, it is forever bound to the Animal class and cannot be overridden. Static methods are bound to the Class object, not an instance of the Class.

    Regular methods are bound at runtime and so the JVM can look at your call to "saySomething" and attempt to determine if you're passing around a subclass of Animal and if so, has it overridden the saySomething() method. Regular methods are bound to an instance of an object, not to the Class itself.

    This is also why you could never do this:

    class Animal
    {
       public abstract static void saySomething();
    }
    

    Since "static" means "bound at compile time", it never makes sense for something to be static and abstract.

提交回复
热议问题