1. 重载(Overload)
在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同,参数顺序不同)即视为重载,重载对返回值类型没有要求,可以相同也可以不同,所以不能通过返回值类型是否相同来判断是否重载。
总结:
- 重载是一个类中多态性的一种表现。
- 重载要求方法名必须相同,参数列表必须不同(参数类型不同,参数个数不同,参数顺序不同)。
- 重载的时候,返回值类型可以相同也可以不同,所以无法通过返回值类型是否相同来判断是否重载。
2. 重写(Override)
重写就是子类把父类本身的方法重写一遍,子类继承父类中原有的方法,但有时子类并不想原封不动的继承父类的某个方法,所以在方法名,参数列表相同的情况下,对方法体重写,重写遵循两同两小一大原则,方法名相同,参数列表相同,子类返回类型小于等于父类方法返回类型(必须在有继承关系的前提下进行比较),子类抛出异常小于等于父类方法抛出异常,子类访问权限大于等于父类方法访问权限。
总结:
-
发生在子类和父类之间
-
两同两小一大原则:
两同:方法名相同,参数列表相同两小: 子类返回类型小于等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常
一大:子类访问权限大于等于父类方法访问权限
面试题:重载和重写的区别
回答:方法的重载和重写都是实现多态的方式,前者实现在编译时的多态性,后者实现在运行时的多态性,重载发生在一个类中,要求方法名必须相同,参数类型必须不同,包括参数列表,参数个数甚至参数顺序不同,返回值类型是否相同不作为判断是否重载的标准。重写是发生在子类和父类之间,重写要求子类被重写方法和父类被重写方法有相同的方法名和参数列表,子类返回值类型小于等于父类方法返回值类型,子类抛出异常小于等于父类方法抛出异常,子类访问权限大于等于父类方法访问权限。