• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

java中静态方法和非静态方法覆盖的区别

发布: 2007-7-04 13:34 | 作者: admin | 来源:  网友评论 | 查看: 78次 | 进入软件测试论坛讨论

领测软件测试网

  MILY: Arial">首先我们提供两个类,基类为Parent,派生类为Child。在Parent中我们提供两个方法,一个是静态方法staticMethod(),一个是非静态方法nonStaticMethod()。在Child

类中我们覆盖着两个方法。

class Parent{

 public void nonStaticMethod() {

        System.out.println("Parent's Non-Static Method is Called");

  }  

       public static void staticMethod() { 

 System.out.println("parent's static method is called");  

}

}

class Child extends Parent{

 public void nonStaticMethod() { 

System.out.println("child's non-static method is called"); 

 } 

 public static void staticMethod() {

               System.out.println("child's static method is called"); 

     }  

}

Test类中我们分别使用Parent p1 = new Parent(),Parent p2 = new Child(),Child c = new Child() 得到三个实例,并分别调用静态方法和非静态方法,我们来看程序的运行结果

Test类中我们分别使用Parent p1 = new Parent(),Parent p2 = new Child(),Child c = new Child()得到三个实例,并分别调用静态方法和非静态方法,我们来看程序的运行结果

public class Test{

      public static void main(String args[])          {  

       Parent p1 = new Parent();  

        Parent p2 = new Child();  

       Child c = new Child();

      System.out.print("Parent.static: ");

                 Parent.staticMethod(); 

     System.out.print("p1.static: ");

p1.staticMethod(); 

         System.out.print("p2.static: ");

p2.staticMethod();

        System.out.print("p1.nonStatic: ");

        p1.nonStaticMethod();

        System.out.print("p2.nonStatic: ");

        p2.nonStaticMethod();

        System.out.print("Child.static: ");

Child.staticMethod();

      System.out.print("c.static: ");

                 c.staticMethod(); 

         System.out.print("c.nonStatic: ");

        c.nonStaticMethod(); 

      }

}

程序的运行结果为:

Parent.static: parent's static method is called

p1.static: parent's static method is called

p2.static: parent's static method is called

p1.nonStatic: Parent's Non-Static Method is Calle

p2.nonStatic: child's non-static method is called

Child.static: child's static method is called

c.static: child's static method is called

c.nonStatic: child's non-static method is called

值得注意的是p2实际上是一个Child的类型的引用,然而在调用静态方法的时候,它执行的却是父类的静态方法,而不是Child的静态方法,而调用 p2的非静态方法的时候执行的是Child 的非静态方法,为什么呢?原因是静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网