区别 | 方法重载(Overload) | 方法重写(Overwrite/Override) |
两个方法位置 | 同一个类中或父子类 | 子类中 |
权限修饰符 | 无 |
1.private方法不能被重写 2.重写方法的权限修饰符要满足>=被重写方法的权限修饰符 |
其他修饰符 | 无 | final、static修饰符的方法不能被重写 |
返回值类型 | 无 |
1.基本数据类型和void:必须相同 2.引用数据类型:重写方法的返回值类型要满足<=重写方法的返回值类型 |
方法名 | 必须相同 | 必须相同 |
形参列表 | 必须相同 | 必须相同 |
throws异常列表 | 无 |
1.被重写方法没有throws编译时异常类型,重写方法不能throws编译时异常类型 2.被重写方法throws编译时异常类型,重写方法throws的编译时异常类型必须<=被重写方法throws编译时异常类型 3.throws运行时异常类型不做任何检查 |
什么时候确定调用哪个方法 | 在编译时期确定调用哪一个方法,由传递给方法的实际参数类型和数量决定 | 在运行时期确定调用哪一个方法,这依赖于对象的实际类型 |
问: Java支持运算符重载吗?为什么?
Java不支持运算符重载。Java的设计 目的是为了提供一种简洁清晰的编程语言,避免过度使用运算符重载导致代码难以理解和维护。
问:构造器可以被重载和重写吗?构造器可以重载,但不能重写。
问:私有方法能被重载或重写吗?私有方法可以重载,但是不能重写。
问:静态方法可以被继承吗?可以。调用父类的静态方法可以通过“父类名.静态方法”,也可以通过“子类名静态方法”。
问:静态方法能被重载或重写吗?静态方法可以重载,但不能重写。子类如果定义了相同签名的静态方法,也不算重写。