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



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

相对而言,如果"覆盖"其超类的静态方法,则称为隐藏。

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

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

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

           MyClass.abc();

这不依赖于对象,因为您在编译时清楚地提到了与对象无关的类名,因为此静态方法对所有对象都是全局的。因此,无论您提到什么类名,在静态方法的情况下都会调用该方法。

静态方法的地址在编译时确定。因此,无需进一步搜索方法地址,这是之前决定的。

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

最新更新