Java方法重写

Java方法重写

重写是方法的重写与属性无关#

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,抛出 IOException 异常或者 IOException 的子类异常。

方法重写的规则#

1、参数列表与被重写方法的参数列表必须完全相同。
2、返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
3、访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
4、父类的成员方法只能被它的子类重写。
5、声明为 final 的方法不能被重写。
6、声明为 static 的方法不能被重写,但是能够被再次声明。
7、子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
8、子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
9、重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
10、构造方法不能被重写。
11、如果不能继承一个类,则不能重写该类的方法。

个人理解#

1、方法名和参数列表必须相同
2、修饰符即(public > protected > default > private):范围可以扩大但不能缩小
3、抛出异常:范围可以被缩小但不能扩大(classnotfoundexception<————但——//——>exception(大))
4、重写子类的方法和父类必须一致,方法体可以不同
5、为啥重写:父类功能子类不一定需要或者不一定满足

重写的注解@Override

静态方法和非静态方法区别很大:如上图,静态方法是类的方法,而非静态方法是对象的方法,有static时,b调用了B类的方法,因为b时用B类定义的,而没有static时,b调用的是对象的方法,而b是A类new的,即b是Anew出的对象,因此调用A的方法。#

当需要在子类中调用父类的被重写方法时,要使用 super 关键字。#

推荐阅读