我们可以覆盖Java中的静态方法吗?
时间:2020-02-23 14:35:05 来源:igfitidea点击:
不,我们不能覆盖Java中的静态方法。
静态方法是可以在不创建类对象的情况下调用的方法,它们是类级方法。
在另一方面,如果子类具有与基类相同的方法签名,则称为方法覆盖。
它的执行在运行时决定。
以下是我们无法在Java中覆盖静态方法的原因:
- 静态方法属于类。他们不属于对象,覆盖,对象决定要调用哪种方法。
- 方法覆盖动态地发生(运行时),这意味着根据用于调用的对象在运行时在运行时执行哪种方法,而静态方法静态地(编译时间)。
package org.igi.theitroad; class Display { public static void hello() //static method { System.out.println("Hello...Good morning"); } } class DisplayMessage extends Display { public static void hello() //redefining of base class static method in derived class { System.out.println("Hello...everyone"); } } public class DisplayMsg { public static void main(String args[]) { Display d=new Display(); //creation of base class object d.hello(); d=new DisplayMessage(); //base class reference is referring to derived class object and as per overriding rules it should call DisplayMessage hello() d.hello(); //but it calls Display class hello() DisplayMessage ds=new DisplayMessage(); //creation of derived class object ds.hello(); } }
根据方法覆盖规则,通过object.so的类型,在运行时通过object.so在运行时解析方法调用,在我们上面的示例中,第二个示例中的d.hello()应该调用displaymessage类的hello()方法,因为显示类的参考变量是由DisplayMessage的对象引用,但它调用Display Class Hello()本身。
此发生,因为静态方法在编译时已解决。
因此,如果派生类的静态方法具有与基类静态方法相同的签名,则称为方法隐藏而不是方法覆盖。