我们可以覆盖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()本身。
此发生,因为静态方法在编译时已解决。

因此,如果派生类的静态方法具有与基类静态方法相同的签名,则称为方法隐藏而不是方法覆盖。