静态的方法是非虚方法(Java中的非虚方法有private,final,static,构造器,非虚方法无需根据具体的对象遍历方法区的方法表,决定调用关系)
也就是说,对于静态类型方法的调用,是其声明类型的,如Parent c = new Child(); Parent便是其外观类型(声明类型),故调用的便是Parent类型的静态方法
package com.company; public class Main { public static void main(String[] args) { Parent c = new Child(); c.display(); } } class Parent { public static void display() { System.out.println("Parent->display"); } } class Child extends Parent { public static void display() { System.out.println("Child->display"); } }
结果:
Parent->display
package com.company; public class Main { public static void main(String[] args) { Parent c = new Child(); c.display(); } } class Parent { public void display() { System.out.println("Parent->display"); } } class Child extends Parent { public void display() { System.out.println("Child->display"); } }
结果:
Child->display
==================================================================================
package com.company; public class Main { static{ System.out.println("test static 1"); } public static void main(String[] args) { } static{ System.out.println("test static 2"); } }
结果:
test static 1 test static 2
虽然在main方法中没有任何语句,但是还是会输出。另外,static块可以出现类中的任何地方(只要不是方法内部,记住,任何方法内部都不行),并且执行是按照static块的顺序执行的。