对于初学者而言,概念往往很难理清楚。我根据我的理解来谈谈 Java 中重写方法与重载方法的区别。
重写Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类或者接口中必须存在。
注意:后文的重写方法与覆盖方法同义
覆盖父类或者接口方法的规则重写方法的方法名必须与父类或接口方法名相同,否则是定义新方法
重写方法的方法参数必须与父类或接口方法参数相同,否则是重载方法
重写方法的返回类型必须与父类或接口方法返回类型相同,否则是重载方法
重写方法的访问修饰符必须比父类或者接口方法的访问修饰符大(public>protected>default>private),否则运行时可能出现异常
重写方法不能抛出父类中没有的检查型异常
重写方法不能抛出父类抛出异常的父异常
父类或者接口中需要被重写的方法不能被定义为 private,私有方法对子类不可见,在接口中定义私有方法没有意义
静态方法不能被重写为非静态的方法(编译不通过)
重载重载方法具有相同的方法名,不同的方法参数(参数个数,参数类型),重载在 Java 中很常见。例如 jar 包中的 String 类,它的构造函数就有很多的重载方法。
重载方法的规则重载方法的方法名必须相同
重载方法的方法参数必须不同,方法参数可以是不同的参数个数,参数类型,参数顺序(参数类型必须不同)
不能通过访问权限,返回类型,抛出的异常类型进行方法重载
注意:通常,我们在重写方法前面加上 @Override ,它表示这是一个重写方法,编译器会自动去父类或者接口中帮我们检查重写方法是否符合相关规则。
注意:对于重载方法,我们在方法前面加上 @Overload ,该注解没有实际含义,仅表示该方法是一个重载方法
相信读者朋友都还记得 Java 语言的三大特性:封装,继承,多态,而方法的重写就很好的诠释了 Java 继承性。
重载方法的意义重载方法使用相同的方法名,需要通过不同的方法参数来区分,这是 Java 多态性的一种体现。