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

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()







阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ssyes123/article/details/79684448
个人分类: JAVA
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭