如果子类实现具有与其超类具有相同签名的实例方法,则称为覆盖。
相比之下,如果“覆盖”其超类的静态方法,则称为隐藏。
在函数调用期间,这两个概念在内存中有什么区别?
发布于 2015-04-16 22:16:49
静态方法的地址在编译时确定。因此,没有必要进一步搜索方法地址,这是决定的方式。
重写的方法地址在运行时确定。它取决于实例,并从基方法到重写方法搜索该方法的地址。
发布于 2015-04-16 22:24:33
重写是一种运行时现象,它依赖于对象,而对象是在运行时创建的,因此在运行时将根据对象来决定函数调用。
而静态方法调用是通过添加类名来完成的,如
MyClass.abc();
这不依赖于对象,因为您在编译时清楚地提到了类名,这与对象无关,因为这个静态方法对所有对象都是全局的。因此,无论您将提到哪个类名,在静态方法的情况下,都将调用该方法。
https://stackoverflow.com/questions/29679162
复制相似问题