我们可以覆盖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()本身。
此发生,因为静态方法在编译时已解决。
因此,如果派生类的静态方法具有与基类静态方法相同的签名,则称为方法隐藏而不是方法覆盖。

