Java中方法重载和重写的区别
重载
- 重载发生在一个类中或子类中,通常体现在构造方法的重载
- 重载的规则是:方法名相同,参数列表不同,方法能够在一个子类中被重载
重写
- 重写通常发生在继承关系中,通常体现在子类对父类方法的重写
- 重写的规则是:
1.参数列表与被重写的方法的参数列表必须相同
2.返回类型与被重写的方法的返回类型可以不同,但是必须是父类返回值的派生类(java5以前的版本返回类型要求一样,java7以后的版本可以不同)
3.访问权限不能比父类被重写的方法的访问权限更低,列如:如果父类的一个方法声明为public,那么子类重写该方法就不能声明为protected
4.父类的成员方法只能被他的子类重写
5.声明为final的方法不能被重写
6.声明为static的方法不能被重写,但是能够被再次声明
7.子类和父类在同一个包中,那么可以重写父类所有方法,除了声明为private和final的方法
8.子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final的方法
9.重写的方法能够抛出任何非强制异常,如果抛出异常,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以
10.构造方法不能被重写。
注意:编译器认为在参数类型中(int [] arr)和(int... arr)这两种表示的是一样的