多态,也就是多种形态。多态分为两种形式,一种为方法的重载与重写,另一种为对象的多态。
方法的重载与重写:
静态多态,也就是我们所说的方法的重载。方法的重载是指,在同一个类中,允许有多个方法名相同,参数列表不同(类型,个数,顺序)。与访问控制符、返回值、异常无关。
动态多态,即方法的重写。方法重写是指,在继承父类中某个方法不能满足子类的需求时,子类可以重写父类的方法,但是,重写时,方法名、返回值类型、参数列表都必须和父类中该方法一样,子类中的访问控制符不能比父类更严格。如果父类中的该方法使用private修饰,则子类不能访问该方法。
重载与重写的对比
位置 | 方法名 | 参数列表 | 返回值 | 访问控制符 | |
重载 | 同一类中 | 一样 | 不一样 | 无关 | 无关 |
重写 | 父类和子类 | 一样 | 一样 | 一样 | 子类不能比父类严格 |
对象多态分为向上转型和向下转型
向上转型语法:父类 父类对象 = 子类对象
发生向上转型,调用方法时,如果子类重写了该方法,则调用的是子类重写后的方法。若没有重写,则用自己的。
向下转型语法:子类 子类对象 = (子类)父类对象
子类是一个特殊的父类,因此java中允许讲一个子类的对象直接赋给一个父类对象,可以自动完成向上转型,编译时是父类,运行时则是子类的特征,java中也可以向下转型,但是向下转型必须完成一次向上转型。