Java中的静态方法不能被子类重写

本文详细探讨了Java中静态方法的特点及其与多态性的关系。通过具体的代码示例,展示了静态方法如何工作,以及为什么它们不能被子类重写。此外,还介绍了静态方法与非静态方法之间的绑定时期区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中的静态方法不能被子类重写


特点:静态方法属于类的方法,也属于对象的方法,但是静态方法随类的存在。

结论:Java中的静态方法不能被子类重写,实际上,子类的静态方法隐藏了父类的静态方法,因此父类的子类的静态方法同时存在,只不过父类通过类名(或对象名)调用的是父类的静态方法,子类通过类名(或对象名)调用的是子类的静态方法。


(1)代码如下:

public class Test {
	public static void main(String[] args) {
		Father f1 = new Son();
		f1.methon();			// static(静态)方法的调用,不支持多态,所以此处调用的父类的静态方法
		f1.doWork();			// 非static(静态)方法的调用,支持多态
		
		System.out.println("---------------");
		
		Son s1 =new Son();
		s1.methon();
		s1.doWork();
	}

}
class Father {
	public static void methon(){
		System.out.println("Father static methon()");
	}
	
	public void doWork(){
		System.out.println("Father doWork()");
	}
}

class Son extends Father {
	public static void methon(){
		System.out.println("Son static methon()");
	}
	public void doWork(){
		System.out.println("Son doWork()");
	}
}

打印结果:

Father static methon()
Son doWork()
---------------
Son static methon()
Son doWork()

结论:

(1)静态方法不支持多态。(final,private 方法也如此)

(2)静态方法可通过类名直接调用,也可通过类的实例化对象调用,因此Father 的实例化对象f1调用的是父类(不是子类)的静态方法。

(3)静态方法的绑定时期为代码的编译器期,也叫前期绑定。非静态的方法属于程序的执行期绑定,也就运行期绑定。



对于结论(3)举个极端的例子

public class Test {
	public static void main(String[] args) {
		Father f1 = new Son();
		f1.methon();			// static(静态)方法的调用,不支持多态,所以此处调用的父类的静态方法
		f1.doWork();			// 非static(静态)方法的调用,支持多态
		
		System.out.println("---------------");
		
		Son s1 =new Son();
		s1.methon();
		s1.doWork();
		
		System.out.println("---------------");
		
		Father f2= null;   // 创建一个父类变量的空引用
		f2.methon();       // 调用父类的静态方法,此处竟然不出错,表明了静态方法的特殊性
	}

}
class Father {
	public static void methon(){
		System.out.println("Father static methon()");
	}
	
	public void doWork(){
		System.out.println("Father doWork()");
	}
}

class Son extends Father {
	public static void methon(){
		System.out.println("Son static methon()");
	}
	public void doWork(){
		System.out.println("Son doWork()");
	}
}
打印结果:
Father static methon()
Son doWork()
---------------
Son static methon()
Son doWork()
---------------
Father static methon()







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值