Override和隐藏超类的静态方法有什么区别

时间:2015-04-16 15:20:22

标签: java

如果子类实现了与其超类具有相同签名的实例方法,则称为覆盖。

相比之下,如果“覆盖”其超类的静态方法,则称为隐藏。

在函数调用期间,这两个概念在内存中有什么区别?

2 个答案:

答案 0 :(得分:1)

静态方法的地址在编译时确定。所以没有必要进一步搜索方法地址,它是以前决定的方式。

重写的方法地址在运行时确定。它取决于实例,方法的地址从基本方法搜索到重写方法。

答案 1 :(得分:1)

覆盖是一个运行时现象,它取决于对象和对象是在运行时创建的,因此函数调用将在运行时根据对象决定。

而静态方法调用通过添加类名称来完成,如

           MyClass.abc();

这不依赖于对象,因为您在编译时明确提到类名与object无关,因为这个静态方法对所有对象都是全局的。因此无论类名如何,您都会提到在静态方法的情况下将调用该方法。