多态
——“面向对象的三大特性是什么?” ——“封装、继承、多态。” 这大概是最容易回答的面试题了。但是,封装、继承、多态到底是什么?它们在面向对象中起到了什么样的作用呢? 多态 多态(Polymorphic)其实也是一个顾名思义的词:“多态”就是一种事物的“多”种形“态”。 “多态”这个概念在面向对象中同样有多种形态:类的多态、方法的多态、以及实例的多态。 类的多态 类的多态最常见、也最好理解。子类继承了父类(包括实现某个接口)后,父类就有了多种形态:它既可以是父类本身,也可以是它的子类A,还可以是它的子类B、甚至可以是子类A的子类A1……在《 继承 》一文中,这种多态的例子比比皆是,这里就不赘述了。 方法的多态 绝大多数情况下,子类继承了父类之后都会重写父类的方法实现。这时,同一个方法就有了多种不同的实现,这就是一种方法的多态。当然,除了重写之外,还有一种方法的多态叫做“重载”,即通过修改方法的参数列表(参数类型、参数个数等)来为同一个方法提供多种实现。 不过我个人不太喜欢重载,也不太愿意把归入多态之中。Java以方法名+参数列表作为一个方法的“签名”,而重载修改了参数列表,也就修改了方法签名。这时,重载后的这些方法还能称为“同一个方法”的不同实现吗?此外,Java会在编译期就确定使用哪个重载方法,但只有到了运行时才能知道使用的是哪个类重写的方法。也就是说,重载并不具备多态所应有的