- ---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
复制代码 在继承中,子类隐藏父类的静态方法,覆盖父类的实例方法。这两者的区别在于,运行时,java虚拟机把静态方法和所属的类绑定,这种绑定属于静态绑定,而把实例方法和所属的实例进行绑定,这种绑定属于动态绑定,以下程序展示了 这一区别。- class Base
- {
- void method() //实例方法
- {
- System.out.println("method of Base");
- }
- static void staticMethod()
- {
- System.out.println("static method of Base");
- }
- }
- public class Sub extends Base //覆盖父类的实例方法method()
- {
- void method()
- {
- System.out.println("method of Sub");
- }
- static void staticMethod() //隐藏父类的静态方法staticMethod()
- {
- System.out.println("static method of Sub");
- }
- public static void main(String[ ] args)
- {
- Base sub1= new Sub(); //subi被声明为Base类型,引用Sub实例
- sub1.method(); //打印method of Sub
- sub2.staticMethod(); //打印static method of Base
-
- Sub sub2= new Sub(); //sub2被声明为Sub类型,引用Sub实例
- sub2.method(); //打印method of Sub
- sub2.staticMethod(); //打印static method of Sub
- }
- }
复制代码 运行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()隐藏。- ---------------------- <a target="blank">ASP.Net+Android+IOS开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
- 详细请查看:<a target="blank">http://edu.csdn.net</a>
复制代码 |
|