下面这个贴子我实在是不忍心再看下去了,请允许我单独开贴澄清一下:
http://expert.csdn.net/Expert/topic/2760/2760712.xml?temp=.4399073=========================================================
 Polymorphism是继abstraction和inheritance之后的OOP的第三个重要思想。- Bruce Eckel
=========================================================我想说说我认识的这三个单词:overload、override和polymorphism。>>overload(通常被翻译为过载或重载)一般语境里overload是对method(方法)而言的,可以指一个类中多个名字相同而参数类型列表不相同的方法,这个名字代表的方法就是被overload了的。编译器会根据参数类型列表的不同来决定调用叫这个名字的很多方法中具体的哪一个。>>override(通常被翻译为覆盖)一般语境里,如果说这个method(方法)是被override来的,就是说在定义这个方法的类的父类中有一个与这个方法同名且参数类型列表相同的方法,在子类中,这个方法被override了。在对这个子类的实例调用该方法时,编译器确切的知道调用的是这个子类的方法。考虑这样两个类:class Father {
    public void doSomething(){}
    public void doSomething(int a){}
    public void doSomething(String s, int a){}
}class Son extends Father {
    public void doSomething(String s, int a) {}
    public void doSomething(int a, String s){}
}Father类中有3个doSomething方法,唯一的区别是参数类型列表,它们是overload了的方法。再看子类,第一个方法也叫doSomething,且父类中有一个doSomething方法和这个方法的参数类型列表相同,所以这是override;而第二个方法虽然名字也叫doSomething,但它的参数类型列表跟父类中和子类中其他的doSomething方法的参数类型列表不一致,所以编译器默认这是一个overload的方法。那实际上我们有多少种方式来调用Son的实例呢?如下:new Son().dosomething();
new Son().dosomething(3);
new Son().dosomething("Hi", 5);
new Son().dosomething(7, "Hello");其中前三个是从父类继承的,且第三个是调用的子类的那个public void doSomething(String s, int a){}方法,最后一个是在子类中新定义的一个overload的方法。注意:overload是指同样的东西在不同的地方具有多种含义,而override是指它随时随地都只有一种含义。>>polymorphism(通常被翻译为多态或多形)"polymorphism也叫做dynamic-binding、late-binding或者、runtime-binding,从字面理解意味着多种不同的形态。在面向对象的程序设计中,我们有相同的外观(基类的通用接口)以及使用那个外观的不同形式:动态绑定或组织的、不同版本的方法。......人们经常混淆Java其他的、非面向对象的特性,比如方法过载(method overload)等,这些特征有时也具备面向对象的某些特征。但不要被愚弄:如果随后没有发生绑定,就不成其为polymorphism。" - Bruce Eckel考虑上面的例子,如果有一个类定义了一个方法以Father对象为参数,另一个方法调用这个方法:public void callHimUp(Father m) {
    m.doSomething("Get up!", 7);
}public void chooseFromFatherAndSon(boolean isMorning) {
    Father m;
    if (isMorning) {
        m = new Father();
    } else {
        m = new Son();
    }
    callHimUp(m);
}编译时编译器并不知道究竟最后哪一个类的public void doSomething(String s, int a) {}方法会被调用,这个只有在运行期才知道。这就是晚绑定,这就是多态。=========================================================
我的意思很明白了,重载不是多态,甚至不是OOP的特性,只有存在晚绑定,才能成其为多态。欢迎讨论。