static method re-declare or override?
A method declared static cannot be overridden but can be re-declared. 子类可以定义与父类的静态方法同名的的静态方法,以便在子类中隐藏父类的静态方法。次重定义满足override相似的约束。 子类隐藏父类的静态方法和子类覆盖父类的实例方法,两者的却别:运行时,JVM把静态方法和所属的类绑定,把实例方法和所属的实例绑定。 class Base{ static void method{ print("base"); } }
class Sub extends base{ static void method{ print("sub"); } }
Base sub1=new Sub(); Sub sub2=new Sub(); sub1.method(); sub2.method();
output: base sub
因为sub1声明为Base类型,JVM调用Base类的method()。