java方法的重写
我们知道方法有重载,但是今天我来说却与重载大不相同,你没看错,它就是方法的重写。它的定义是:在子类中可以根据需要从父类中继承的方法进行改造,也称方法的重置,覆盖。在执行时,子类的方法将覆盖父类的方法。
方法重写的应用:重写后,当创建子类的对象后,通过子类对象调用父类中同名同参的方法时,实际执行的是子类重写父类的方法。(通俗的讲就是,继承完了后,再对其进行重写,该方法就不全与父类相同了)
一.方法重写的规定(我先在这里说明了需要注意的点,后面会进行实践举例)
1.子类中重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同。
2.子类重写的方法的权限修饰符要大于等于父类中的权限修饰符(可以理解为前浪更比后浪强,不强也得一样叭)
3.子类中不可重写父类中声明为private的方法
4.返回值的类型:
若父类被重写成为void类型的,则子类重写的方法也必须为void。
若父类被重写成A类,则子类重写的方法可以为A类,也可以为A类的子类。
5.父类被重写的类型为基本数据类型,则子类重写也必须是同一数据类型
(无自动提升!!!)
二.方法重写的使用
直接代码说话:
首先建立一个父类:
public class hero{
int age;
String name;
boolean ismale;
public hero(){
}
public hero(String name1, String abi){
System.out.println(name1+"的能力是"+abi);
}
public void achievement(){
System.out.println("我外星人干掉了");
}
}
再创建个子类:
public class superman extends hero {
String wuqi;
public superman(){
}
public void achievement(){
System.out.println("我已经干掉100个外星人了");
}
public void destesr(String wuqi){
this.wuqi=wuqi;
}
}
最后new对象:
public class ishero {
public static void main(String[] args) {
hero me=new hero();
me.achievement();
superman king=new superman();
king.achievement();
}
}
我们发现最后输出的结果为:
我外星人干掉了
我已经干掉100个外星人了
子类继承完父类后对其中某些方法进行修改了,那么该类以及其子类也会被改写,这就是重写。(注意:方法)
三.最后的小小说明
1.异常类型:子类重写的方法抛出异常类型不大于父类被重写的方法抛出的异常类型。
2.由于子类与父类中的同名同参的方法要么声明为非static的要么声明为static的,故二者必有其一,但是我们需要注意的是当其声明为static时,就已经不是重写了。