A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. ---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
复制代码
在继承中,子类隐藏父类的静态方法,覆盖父类的实例方法。这两者的区别在于,运行时,java虚拟机把静态方法和所属的类绑定,这种绑定属于静态绑定,而把实例方法和所属的实例进行绑定,这种绑定属于动态绑定,以下程序展示了 这一区别。
  1. class Base
  2. {
  3.     void method()                                              //实例方法
  4.     {
  5.         System.out.println("method of Base");
  6.     }
  7.     static void staticMethod()
  8.     {
  9.          System.out.println("static method of Base");
  10.     }
  11. }
  12. public class Sub extends Base                  //覆盖父类的实例方法method()
  13. {
  14.     void method()
  15.     {
  16.          System.out.println("method of Sub");
  17.     }
  18.     static void staticMethod()                   //隐藏父类的静态方法staticMethod()
  19.     {
  20.         System.out.println("static method of Sub");
  21.     }

  22.     public static void main(String[ ] args)
  23.     {
  24.         Base sub1= new Sub();           //subi被声明为Base类型,引用Sub实例
  25.         sub1.method();                       //打印method of Sub
  26.         sub2.staticMethod();              //打印static method of Base
  27.         
  28.         Sub sub2= new Sub();          //sub2被声明为Sub类型,引用Sub实例
  29.          sub2.method();                    //打印method of Sub
  30.         sub2.staticMethod();            //打印static method of Sub
  31.     }
  32. }
复制代码
运行Sub类的main()方法,程序输出:
        method of Sub
        static method of Base
        method of Sub
        static method of Sub
       引用变量sub1和sub2都引用Sub实例,java虚拟机在执行sub1.method()和sub2.method()时,都调用Sub实例的method()方法,此时,父类的method()方法被子类覆盖。
       引用变量sub1被声名为Base类型,java虚拟机在执行sub1.staticMethod()时调用Base类的staticMethod()方法,可见父类Base的静态方法staticMethod()不能被覆盖。
        引用变量sub2被声明为Sub类型,java虚拟机执行sub2.staticMethod()方法时,调用Sub类的staticMethod()方法,Base类的staticMethod()方法被子类的staticMethod()隐藏。
  1. ---------------------- <a target="blank">ASP.Net+Android+IOS开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

  2. 详细请查看:<a  target="blank">http://edu.csdn.net</a>
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马