首先可以明确的是:在类继承中类实例成员方法的调用是按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。
本文探讨了Java中类继承时实例方法与静态方法的调用差异。通过具体示例展示了当子类覆盖父类方法时,如何区分实例方法与静态方法的调用方式及其运行时的行为。
330

被折叠的 条评论
为什么被折叠?



