Java继承类中static成员函数的重写

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java继承类中static成员函数的重写在java中,static成员函数是否可以被重写呢?

结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行。

也就是说,虽然你可以定义一个重写函数,但是该函数没有多态特性。让我们测试一下:

1 class testClass1{ 2 static void SMothod(){ 3 System.out.PRintln("static in testClass1"); 4 } 5 } 6 class testClass2 extends testClass1{ 7 static void SMothod(){ 8 System.out.println("static in testClass2"); 9 }10 }11 public class MainClass{12 public static void main(String... args){13 testClass1 tc1=new testClass2();14 testClass2 tc2 =new testClass2();15 tc1.SMothod(); //输出结果为 static in testClass116 tc2.SMothod(); //输出结果为 static in testClass217 }18 }

从结果中可以看到,当我们用父类的实例引用(实际上该实例是一个子类)调用static函数时,调用的是父类的static函数。

原因在于方法被加载的顺序。

当一个方法被调用时,JVM首先检查其是不是类方法。如果是,则直接从调用该方法引用变量所属类中找到该方法并执行,而不再确定它是否被重写(覆盖)。如果不是,才会去进行其它操作(例如动态方法查询),具体请参考:方法的加载

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航