一、什么是方法重写
方法重写(Method Overriding)是面向对象编程中的一个重要概念,它允许子类重新定义(覆**盖)从其父类继承的方法。当子类中定义了一个与父类中具有相同名称、参数列表和返回类型的方法时,就称为方法重写。
二、为什么要方法重写
当父类的方法满足不了子类的需求的时候,需要在子类中对该方法进行重写
三、方法重写的基本语法:
@Override
权限修饰符 返回值类型 方法名(形参列表){
//子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private
//当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void
}
代码实现:
package com.java.extend;
public class Person { //父类
public void talk(String msg){//成员方法
System.out.println("父类说:" + msg);
}
}
package com.java.extend;
public class Student extends Person{ //Person类的子类
//两个成员方法
public void talk(String msg) { //覆写父类Person的成员方法talk()
System.out.println("子类说:" + msg);
}
public void show(String info){
talk(info);//调用子类自身的成员方法
super.talk(info);//调用父类中被子类覆盖的成员方法talk()
}
}
package com.java;
import com.java.extend.Student;
public class Demo007 {
public static void main(String[] args) {
Student stu = new Student();
stu.talk("勤能补拙!"); //调用Student对象的方法
stu.show("骄而不傲!");
}
}
成果展示:
补充:
为什么使用@Override?
当你在一个方法前面加上@Override注解时,编译器会检查该方法的签名(方法名、参数列表、返回类型)是否和父类或接口中的某个方法一致。如果不一致,编译器会报错,提示你有可能错误地重写了方法,或者是没有重写父类或接口中的方法。
注意事项:
1.子类的覆写方法必须与父类的被覆写方法具有相同的名称、返回类型和参数列表。
2.子类重写的方法的访问权限应该大于等于父类方法的访问权限例如,如果父类的方法是public,则子类中覆写的方法也必须是public。
3.子类方法不能抛出比父类方法声明更大的异常。
4.通过在子类中编写与父类中同名方法且满足上述规则的方法,就可以实现方法覆写。这样,在调用该方法时,将会执行子类中的方法而不是父类中的方法。
5.被final修饰就不能被重写
6.当父类的方法被static修饰的时候,子类是不能重写该方法的