| 
 
| 在继承中,子类隐藏父类的静态方法,覆盖父类的实例方法。这两者的区别在于,运行时,java虚拟机把静态方法和所属的类绑定,这种绑定属于静态绑定,而把实例方法和所属的实例进行绑定,这种绑定属于动态绑定,以下程序展示了 这一区别。复制代码---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
运行Sub类的main()方法,程序输出:复制代码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
    }
}
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> 
 | 
 |