重写即子类继承父类以后,可以对父类中同名同参数的方法进行覆盖操作。
重写之后,当创建子类对象以后,通过子类对象调用父类中同名同参数的方法时,实际执行的是子类重写的父类方法。
目录
重写的规定
1. 子类中的叫重写的方法,父类中的叫被重写的方法。
2. 子类重写的方法的方法名和形参列表与父类被重写的方法名形参列表相同。
3. 子类重写的方法权限修饰符不小于父类被重写的方法的权限修饰符。
注:子类不能重写父类中声明为 private 权限的方法。
4. 返回值类型
父类被重写的方法的返回值类型是 void,则子类重写的方法返回值类型只能是 void。
父类被重写的方法的返回值类型是 A 类型,则子类重写的方法返回值类型只能是 A 类或 A 的子类。
父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法返回值类型只能是相同的基本数据类型。
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
5. 子类和父类中的同名同参数的方法要么都声明成非 static(考虑重写),要么都声明为 static(不是重写)
代码案例
父类Person
public class Person {
private int age;
public String name;
public Person() {
System.out.println("这是一个Person类");
}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void walk() {
System.out.println("人可以走路");
}
}
子类Student
public class Student extends Person {
public String major;
public Student() {
}
public Student(String name,String major) {
this.major = major;
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public void walk() { // 对父类 walk 方法的重写操作
System.out.println("学生也可以走路");
}
}
重写测试
public class testExtends {
public static void main(String[] args) {
Student student = new Student("小明","数据");
System.out.println(student.getName());
student.walk();
}
}
>>> 这是一个Person类
小明
学生也可以走路
Student 类重写了 Person 类中的 walk 方法,进行了“覆盖”操作。