1、重载(Overloading)
方法的重载一定只是参数的类型或个数不同,而方法的返回值相同
可以用相同的方法名但不同的参数列表来定义方法(参数表中参数的数量、类型或次序有差异)的重载。
两个规则适用于重载方法:
1)调用语句的参数表必须有足够的不同,以至于允许区分出正确的方法被调用。正常的拓展晋升(如单精度类型float到双精度类型double)可能被应用,但是这样会导致在某些条件下的混淆
2)方法的返回类型可以各不相同,但它不足以使返回类型变成唯一的差异。重载方法的参数表必须不同。
对于this的任何调用,如果出现,在任何构造方法中必须是第一个语句
2、重写(Overriding)
子类定义同名方法来覆盖父类的方法,是多态技术的一个实现。当父类方法在子类中被覆盖时,通常是子类版本调用父类版本,并做一些附加的工作。
注意事项:
1)不使用super而希望引用父类方法会导致无限的递归,因为子类方法实际上是在调用它自己
2)当通过父类引用调用一个方法时,java会正确地选择与那个对象对应的类的覆盖方法
3)方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法声明,即与父类完全相同的方法名,返回值和参数列表
4)子类可以添加字段,也可以添加方法或者覆盖父类中的方法,然而继承不能去除父类中的任何字段和方法。final类是不可以被继承的,例如String类是final类故不可继承。
3、发生在父类和子类之间的同名方法之间的方法覆盖(重写)要满足以下规则:
1)两个方法的返回值类型必须相同
2)两个方法的参数类型、参数个数、参数顺序必须相同
3)子类方法点的权限必须不小于父类方法的权限private<defalut<public
4)子类方法只能抛出父类方法声明抛出的异常或异常子类
5)子类方法不能覆盖父类声明为final或者static的方法
6)子类方法必须覆盖父类中声明为abstract的方法
4、重写与重载的区别
重写和重载是java多态性的不同表现。
重写是父类与子类之间多态性的一种表现,可以改变返回值的类型
重载是一个类中多态性的一种表现
1)首先重载和重写他们所处的作用域范围不同。重载是在同一个类中进行方法的定义,重写是在父子类中进行方法的定义。
2)其次,他们的定义方式也不同。重载是方法名相同,参数列表不同。而重写是方法名相同参数列表也相同。