重载和重写的区别:
- 重载实现的是编译时的多态性,重写实现的是运行时的多态性
- 方法重载只涉及同一个类,而方法重写是涉及至子类和父类之间(有继承)
- 重载方法名称相同,参数列表不同;重写方法名称相同,参数列表相同
- 重载与访问修饰符及返回类型无关;重写访问修饰及返回类型与被重写方法保持一致,但重写方法的访问修饰符不能严于被重写方法的访问修饰符,可以更 宽泛。重写方法的返回类型可以是被重写方法的子类。
- 重载与所抛出异常类型无关;重写与所抛出异常有关,要么保持一致,要么重 写方法抛出的异常类型可以被重写方法异常类型的子类
重载 重写 是否存在继承 不存在 存在继承 方法名称与参数列表是否相同 方法名称相同,参数列表不同 方法名称相同,参数列表相同 访问修饰符与返回类型 访问修饰符及返回类型无关 方法的访问修饰符不能严于被重写方法的访问修饰符,可以更 宽泛。重写方法的返回类型可以是被重写方法的子类 与所抛异常是否有关 无关 有关 实现多态的方式区分 编译时的多态性 运行时的多态性
能否根据返回类型进行区分:
不能;返回类型作为函数运行后的一个状态,它是保持方法调用者与被调用者进行通信的关键,并不能作某个方法的标识