打印结果:
Unknown Collection
Unknown Collection
Unknown Collection
打印结果:
ABC
比较上面两段程序,第一段程序之所以“失效”的原因是,虽然classify有三种形式的重载(overload)函数,但是对于这个函数的参数来说,只有Collection一种,这是在编译时就决定了的。而第二段程序当调用一个改写(override)方法时,对象的编译时类型不会影响到那个方法被执行。
对于第一种程序的改写可以这样进行:
参考:
《effective java first edition》"Item 26: Use overloading judiciously "