首先可以明确的是:在类继承中类实例成员方法的调用是按Java运行时的所在类的方法来执行的。
所以如下调用:
class Firework{
public void outHi() {
System.out.println("Hi" );
}
public static void outHi2() {
System.out.println("Hi2" );
}
}
class Fountain extends Firework {
public void outHi() {
System.out.println("Fountain,Hi" );
}
public static void outHi2() {
System.out.println("Fountain,Hi2" );
}
}
public class ExceptionTest {
public static void main(String [] args) throws NullPointerException{
Firework f = new Fountain();
f.outHi();
}
}
输出为:
Fountain,Hi (调用了运行时Fountain类方法)
但是类方法,即static方法却不同,如f.outHi2(); 的输出为
Hi2 (调用了Firework类方法)
可以这样解释: 因为 static成员方法是类方法,与实例无关,而直接调用outHi2()的对象引用f的类类型是Firework。