方法重写(0veriding)
方法重写是子类继承父类后 当需要修改父类的一些方法进行扩展 增大功能时 进行的操作, 是建立在继承关系上的.
所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型 方法名 参数个数 参数类型
重写的规则
一 : 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同 否则不能称其为重写而是重载
二: 父类的返回值类型必须与被子类重写的方法返回类型相同 否则不能称其为重写而是重载
三: Java中规定 被子类重写的方法不能拥有比父类方法更加严格的访问权限 当父类中方法的访问权限为private时 该方法只能被自己的类访问 不能被重写(如果在此种情况下 在子类中对其重新定义 也只能算定义了一个新的方法,不会达到重写的效果). 如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。
四: 在继承过程中 如果父类中的方法抛出异常 在子类中重写该方法时 也要抛出该异常 且抛出的异常不能多于父类中抛出的异常 可以等于 换句话说 重写方法一定不能抛出新的检查异常 或者比重写方法声明更加宽泛的检查型异常.
方法重载(Overloading)
方法重载是让类以统一的方式处理不同类型数据的一种手段 调用方法时通过传递给它们不同个数和类型的参数来决定具体使用哪个方法 这就是多态性!
所谓方法重载是指在一个类中 多个方法的方法名相同 但是参数列表不同 参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
一般只重载功能相似的方法(构造方法也可以重载)
所谓重载是指 我们可以定义一些名称相同的方法 通过定义不同的参数来区分这些方法
在调用时 java虚拟机回根据不同的参数列表 来选择合适的方法执行 也就是说当一个重载方法被调用时 java用参数的类型和个数来决定实际调用的重载方法 所以每个重载方法的参数的类型或者个数必须是不同的.(根据返回值类型并不足以区分使用的是哪个方法)
使用重载时的注意事项:
1-在使用重载时只能通过不同的参数列表 必须具有不同的参数列表
2-不能通过访问权限,返回类型,抛出的异常进行重载
3-方法的异常类型和数目不会对重载造成影响
4-可以有不同的返回类型 只要参数列表不同就可以了
5-可以有不同的访问修饰符
6-可以抛出不同的异常
重载规则
1,被重载的方法必须改变参数列表;
2,被重载的方法可以改变返回类型;
3,被重载的方法可以改变访问修饰符;
4,被重载的方法可以声明新的或更广的检查异常;
5,方法能够在同一个类中或者在一个子类中被重载.
总结
重写和重载的区别
方法重载:
1,同一个类中
2,方法名相同,参数列表不同(参考顺序,个数,类型)
3,方法返回值.修饰符任意
4,与方法的参数名无关
方法重写
1,有继承关系的子类中
2,方法名相同,参数列表相同(参考顺序,个数,类型),方法返回值相同
3,访问修饰符,访问范围需要大于父类的访问范围
4,与方法的参数名无关
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |