静态的方法是非虚方法(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块的顺序执行的。