重载:  1.同名, 但不同参数个数。  
        2.同名,但不同参数类型。
        3.同名,但不同返回值。
覆盖: 1.必须与父类同名,同参,同返回值。
         如果有一者不一样,就不是。
是这样吧??

解决方案 »

  1.   

    還是用overload, override兩個詞比較清晰..
    如1所以,overload的標識是參數部分
      

  2.   

       重载是方法之间的一种关系,多个方法使用相同的方法名,但是签名不同,所以我们可以通过签名来区分。早期的java中因为没有采用模板机制,所以大量的方法都是采用重载的方法写成的,比如最经典的System.out.println();在代码里有十种实现方法,接受各种不同类型的参数。这是 Overloading。
        覆盖是类层次结构中的一种关系,比如父类有某个方法,子类中同样实现一个同名并且签名相同的方法,这种情况我们称之为overriding。注意,这里要求签名相同。但是返回值可以有些许不同,这里的不同指的是子类中重写的方法可以返回父类中返回类型的子类型,说起来很绕,简单的举个例子,如果父类中方法的返回类型是Number类型,那么子类中的这个覆盖方法的返回类型可以是Number类型,也可以是其子类型,比如Integer,Double等等。
        这样两个概念的区别已经很明了了,而且也应该知道,覆盖是实现多态的关键技术。
        两个概念还有个重要的区别是,重载是静态绑定的,因为编译的时候我就可以根据签名确定具体要调用的方法,而覆盖是运行时绑定的,因为运行的时候我才能根据运行时类型信息,确定具体要调用哪个类中定义的覆盖方法。
        最后,引经据典
        《The Java Programming Language》中:
           *      Overloading a method is what you have already learned: providing more than one method with the same name but with different signatures to distinguish them.
        *      Overriding a method means replacing the superclass's implementation of a method with one of your own. The signatures must be identicalbut the return type can vary in a particular way, as discussed below.
      

  3.   

    你得解释下signature(签名)是什么意思...
      

  4.   

    對,只咬嚼字面意思,意義不大,就好像紅學那些人,不同出版社的紅樓夢之間某句的一兩個字不同,也可以研究一番,有何意義,小說存在的意旨不是這樣的
    Java是一種語言,不像微機原理,算法分析,數據結構等基礎理論,你應該做到如10樓所說
      

  5.   

    让我想起我曾经无意之间写出的一个程序~public class qdb<A,B>
    {
    /*public void f() //这2个是错误的,因为返回值不属于重载方法
    {
    }
    public int f()
    {
    return 1;
    }*/
    /*public void f(A a)//这2个还是错的,因为泛型的擦除,导致这2个方法成为
    {                   //f(Object a) f(Object b)}
    public void f(B b)
    {}*/
    public void f(A a) //看这个!
    {}
    public int f(B b)
    {
    return 1;
    }
    public static void main(String[] args)
    {}