重写方法规则如下:
* 变元列表必须与被重写的方法的变元列表完全匹配,如果不匹配,则得到的可能就是一个意想不到的重载方法
* 返回类型必须与超类中被重写方法中原先声明的返回类型或其子类型
* 访问级别的限制性一定不能比被重写方法的更严格
* 访问级别的限制性可以比被重写方法的弱
* 仅当实力方法被子类继承时,它们才能被重写
* 重写方法可以抛出任何未检验(运行时异常),无论被重写方法是否声明了该异常
*重写方法一定不能抛出比被重写方法声明的检验异常更新或更广的检验异常
* 重写方法可以抛出更少或更有限的异常
* 不能重写标识为final的方法
* 不能重写标识为static 的方法
* 如果方法不能被继承,那么不能重写它
重载方法:
* 重载方法必须改变变元列表
* 重载方法可以改变返回类型
* 重载方法可以改变访问修饰符
* 重载方法可以声明新的或更广的异常
* 方法能够在同一个类或者同一个子类中被重载
实现接口:
未来成为合法的实现类,非抽象实现类必须执行以下操作:
* 为来自所声明接口的所有方法提供具体的实现
* 遵守合法重写的所有规则
* 在实现方法上声明非检验异常,而不是在接口方法上声明,也不是在接口方法上声明异常的子类
* 保持接口方法的签名,并且保持相同的返回类型(或子类型)但是不必声明在接口方法声明中声明过的异常
*接口可以extends 多个接口
* 接口不能implements 接口
|
|
重载 |
重写 |
|
变元 |
必须改变 |
一定不能改变 |
|
返回类型 |
可以改变 |
除协变式返回外,不能改变 |
|
异常 |
可以改变 |
可以减小或消除,一定不能抛出新的或更广的检验异常 |
|
访问级别 |
可以改变 |
一定不能执行更严格的限制 |
|
调用 |
引用类型决定重载哪个版本,在编译时刻做出决定,调用的实际方法仍然是一个在运行时发生的虚拟方法的调用,但是编译器总是知道所调用方法的签名。因此在运行时,不仅是方法所在的类,而且变元匹配也已经明确了 |
对象类型(也就是对上实际的实例类型)决定了调用哪个方法在运行时作出的决定 |
2613

被折叠的 条评论
为什么被折叠?



