java普通方法和静态方法
举例:
public class Father {
public void say(){
System.out.println("father");
}
public static void action(){
System.out.println("爸爸打儿子!");
}
}
public class Son extends Father{
public void say() {
System.out.println("son");
}
public static void action(){
System.out.println("打打!");
}
public static void main(String[] args) {
Father f=new Son();
f.say();
f.action();
}
}
输出:son
爸爸打儿子!
当调用say方法执行的是Son的方法,也就是重写的say方法。而当调用action方法时,执行的是father的方法。
普通方法,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
静态方法,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法。
Java 的类初始化机制决定的。一个类在初始化的时候,按照:父类静态初始化块 -> 子类静态初始化块 -> 父类初始化块 -> 父类构造器 -> 子类初始化块 -> 子类构造器,这样的顺序初始化的。当该子类已经加载过之后再次实例化子类对象时,执行:父类初始化块 -> 父类构造器 -> 子类初始化块 -> 子类构造器。静态初始化块因为在类初次被加载时已经执行过了,所以不会再次执行。