方法的重写(overriding method)
在java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
在子类和父类中,重写方法后,在调用时,以创建的对象类型为准,会调用谁的方法。
关于方法重写的一些特性:
1、发生在子父类中,方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2、子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3、子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
4、父类中的方法若使用private、static、final任意修饰符修饰,那么不能被子类重写
为什么要重写方法?或者方法重写的目的是什么?
若子类从父类中继承过来的方法,不能满足子类特有的需求时,子类就需要重写父类中相应的方法,方法的重写也是程序扩展的提现。
overloading与overriding的区别?
overloading:方法的重载,发生在同一类中,方法名相同,参数列表不同,返回值无关。
overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于等于父类的访问修饰符,子类的异常声明必须小于或等于父类的异常声明。如果方法被private,static,final修饰,那么不能被重写
super关键字
super关键字可以完成以下的操作:
1、使用super调用父类中的属性,可以从父类实例处获得信息。
2、使用super调用父类中的方法,可以委托父类对象帮助完成某件事情。
3、使用super调用父类中的构造方法(super(实参)形式),必须在子类构造方法的第一条语句,调用父类中相应的构造方法,若不显示的写出来,默认调用父类的无参构造方法,比如:super();
final关键字
使用final关键字完成以下操作:
1、使用final关键字声明一个变量
修饰属性或者修饰局部变量(最终变量),也称为常量。(常量的命名的规则建议全大写,常量必须在定义时初始化或在构造器中初始化)
2、使用final关键字声明一个方法
该方法最终方法,且只能被子类继承,但是不能被子类重写。
3、使用final关键字声明一个类
该类就转变为最终类,没有子类的类,final修饰的类无法被继承。
4、在方法参数中使用final,在该方法内部不能修改参数的值(内部类详解)