重载与重写的区别
这个是我第一篇文章,也是我记录学习的第一步,这个知识点是面试老师经常会问的一个点,所以在此记录一下呀!
重写
其实咱们从字面意思就可以看出来,重写就是把方法重新再写一遍,那就是在子类继承了父类时,但是并不想原封不动继承父类中的某一方法,那么就可以在子类中把父类的方法重新定义一下。
那重写的好处就是在于子类可以根据需要定义特定于自己的行为。
但是肯定是有规则的呀,要求就是:
- 重写的方法的方法名,参数列表,返回类型必须完全与被重写方法相同,否则不能称其为重写,而是重载。
- 重写方法的访问权限一定要高于被重写方法的访问权限,例如:当父类的一个方法被声明为public,那么在子类中重写该方法时,只能是public,不能声明为protected(public>protected>default>private)。
- 声明为final的方法和构造方法不能被重写。
- 静态方法不能被重写为非静态方法。
- 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
重载
重载(overloading)是在一个类中,方法名相同而参数类型列表不同,与返回值和访问修饰符无关,让方法在接收不同的参数来实现不同的功能。
同样的也是有规则的:
- 被重载的方法必须改变参数列表(参数个数,参数类型,参数顺序)
- 返回类型和访问修饰符无所谓,相同与否均可
- 被重载的方法可以声明新的或更广的检查异常
- 方法能够在同一个类中或者在一个子类中被重载