重写背景
子类继承父类,需要对父类的方法进行修改,方法名,参数列表,顺序均一致
ex:
public class Test {
public static void main(String[] args) {
Student s = new Student();
s.eat();//eat dddd....
}
}
public class Person {
public void eat(){
System.out.println("eat...");
}
public void sleep(){
System.out.println("sleep");
}
}
public class Student extends Person{
public void study(){
System.out.println("study...");
}
public void eat(){
System.out.println("eat dddd....");
}
}
重写内存分析
子类与父类方法相同时,优先调用子类的方法。
重载和重写的区别:
重载:在同一个类中,方法名相同,参数列表不同,多个方法构成重载
重写:不同类中,子类对父类提供的方法,进行重写,由于父类的方法无法满足子类使用
位置 | 修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 | 方法体 | |
---|---|---|---|---|---|---|---|
重载(overload) | 同一个类中 | - | - | 相同 | 不同 | - | 不同 |
重写(override) | 子类父类存在继承关系 | 父类权限修饰符低于子类修饰符 | 父类返回值类型大于子类返回值类型 | 相同 | 相同 | 小于等于 | 不同 |
public class Person {
public void eat(){
System.out.println("eat...");
}
public Student sleep(){
System.out.println("sleep");
return new Student();//ok
}
}
public class Student extends Person{
public void study(){
System.out.println("study...");
}
public Person eat(){
System.out.println("eat dddd....");
return new Person();//报错!
}
}