在我们刚开始学习Java时在分别学习Java中的重载与重写时当时我相信每一个人都会掌握的很牢固,可是随着时间的流逝,记忆的模糊,于是乎人们对于重写和重载就反了迷糊。
概念
Java的重写:
重写发生在子类和父类中,即子类对父类的允许访问的方法实现重写编写的过程,但是在编写过程中返回值和形参都不能改变,即外壳不变,核心重写。
重写的好处就是子类根据自己的需要,定义特定于属于自己的行为,即子类能根据自己的需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
例如父类中的一个方法声明为一个IOException的异常,而他的子类继承了这个方法在重写这个方法时不能抛出比IOException更加宽泛的异常比如它的父类Exception,而是只能抛出IOException的子类异常。
Java的重载:
重载是在一个类中,即在一个类中方法名字相同,而参数不同,返回值可以相同也可以不相同。
每个重载的方法都必须要有一个独一无二的参数类型列表。最常用的是构造器的重载。
规则
重写的规则:
1):参数列表必须完全与被重写方法的相同;
2):返回类型必须完全与被重写方法的返回类型相同;
3):访问权限不能比父类中被重写的方法的访问权限更低。(例如父类的方法是public,子类就不能是private、protected,而必须是public);
4):方法的重写只能发生在父类和子类中。子类重写父类的方法;
5):当父类有方法声明为final时子类不能对其进行重写;
6):当父类有方法声明为static时子类不能对其进行重写,只能够被再次声明;
7):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
8):子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;· 9):重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以;
10):构造方法不能被重写;
11): 如果不能继承一个方法,则不能重写这个方法。
重载的规则:
1):被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
· 2):被重载的方法可以改变返回类型;
· 3):被重载的方法可以改变访问修饰符;
· 4):被重载的方法可以声明新的或更广的检查异常;
· 5):方法能够在同一个类中或者在一个子类中被重载;
· 6):无法以返回值类型作为重载函数的区分标准。