方法名 | 参数列表 | 返回值 | 访问修饰符 | 抛出异常 | |
---|---|---|---|---|---|
方法重写 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 | 不能比父类更宽泛 |
方法重载 | 相同 | 不同 | 无关 | 无关 | 无关 |
方法重写一般发生在父类与子类中:
- 其函数名必须相同;
- 参数类型列表必须相同;
- 子类重写的方法的返回值必须与父类方法返回值相同或是父类方法返回值的子类;
- 子类重写的方法的访问修饰符不能比父类更严格,如果父类方法访问修饰符是protect则子类访问修饰符只能是protect或public(严格顺序:private>default>protect>public);
- 子类重写的方法抛出的异常不能比父类方法抛出的异常更宽泛,如果父类方法抛出IOException则子类不能抛出Exception,只能抛IOException的子类如FileNotFoundException;
方法重载一般发生在同一个类中:
- 两个重载方法函数名必须相同;
参数列表不同:
- 参数个数不同
- 参数类型不同
- 参数类型顺序不同