如果子类实现了与其超类具有相同签名的实例方法,则称为覆盖。
相比之下,如果“覆盖”其超类的静态方法,则称为隐藏。
在函数调用期间,这两个概念在内存中有什么区别?
答案 0 :(得分:1)
静态方法的地址在编译时确定。所以没有必要进一步搜索方法地址,它是以前决定的方式。
重写的方法地址在运行时确定。它取决于实例,方法的地址从基本方法搜索到重写方法。
答案 1 :(得分:1)
覆盖是一个运行时现象,它取决于对象和对象是在运行时创建的,因此函数调用将在运行时根据对象决定。
而静态方法调用通过添加类名称来完成,如
MyClass.abc();
这不依赖于对象,因为您在编译时明确提到类名与object无关,因为这个静态方法对所有对象都是全局的。因此无论类名如何,您都会提到在静态方法的情况下将调用该方法。