java中override和overload的区别
override(重写)和overload(重载) 是面向对象编程中两个重要的概念,它们的主要区别:
概念 | 定义 |
---|---|
override | 子类重新实现父类中已有的方法(方法签名完全相同) |
overload | 在同一个类中创建多个同名方法,但这些方法的参数列表不同(参数类型、数量或顺序不同) |
关键区别:
比较纬度 | override(重写) | overload(重载) |
---|---|---|
作用范围 | 发生在继承关系的父子类之间 | 发生在同一个类内部 |
方法签名 | 必须完全相同(方法名+参数列表) | 仅方法名相同,参数列表不同 |
返回类型 | 必须相同或是父类方法返回类型的子类型 | 可以不同 |
访问修饰符 | 不能比父类方法更严苛(可以更宽松)(public>protected>default>private) | 可以任意修改 |
异常抛出 | 不能抛出比父类方法更多活更宽泛的检查异常 | 可以抛出不同的异常 |
静态性 | 不能重写static方法(只能隐藏) | 可以重载static方法 |
注解要求 | java使用@Override注解,kotlin使用override关键字 | 不需要特殊注解 |