码迷,mamicode.com
首页 > 其他好文 > 详细

静态方法为什么不能被重写

时间:2020-03-10 21:55:02      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:detail   引用   一个   sdn   疑惑   子类   方法   The   结果   

首先我们来测试,猜下下面程序的运行结果...

 

 1 // 该类测试静态方法为什么不能被重写
 2 public class Test1_Static {
 3     
 4     public static void main(String[] args) {
 5         Father f = new Father(); 
 6         f.staticMethod();  
 7         Child c = new Child();
 8         c.staticMethod(); 
 9         Father person = new Child();
10         person.staticMethod();  
11         
12     }
13 }
14 
15 
16 class Father {
17     public static void staticMethod() {
18         System.out.println("fatherMethod");
19     }
20 }
21 
22 class Child extends Father{
23     public static void staticMethod() {
24         System.out.println("childMethod");
25     }
26 }

 

打印结果:

fatherMethod
childMethod
fatherMethod

相信前两个打印结果大家都已经猜到了,但是最后一个结果相信有不少小伙伴会产生疑惑,甚至做出错误的判断,其实一个指向子类对象的父类引用变量来调用父子同名的静态方法时,只会调用父类的静态方法。这是因为静态方法只能被继承,不能被重写,如果子类有和父类相同的静态方法,那么父类的静态方法将会被隐藏,对于子类不可见,也就是说,子类和父类中相同的静态方法是没有关系的方法,他们的行为不具有多态性。但是父类的静态方法可以通过父类.方法名调用。

这个文档也不错,可参考下:关于静态方法为什么不能被重写的一点思考以及overload的一些坑。

静态方法为什么不能被重写

标签:detail   引用   一个   sdn   疑惑   子类   方法   The   结果   

原文地址:https://www.cnblogs.com/love-programming/p/12458693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!