重写/覆盖:
父类与子类之间的多态性,对父类的函数进行重定义。
在子类中定义某种方法与其父类中的某一方法具有相同的名称和参数,我们就说该方法被重写或者覆盖了。
父类与子类之间的多态性,对父类的函数进行重定义。
在子类中定义某种方法与其父类中的某一方法具有相同的名称和参数,我们就说该方法被重写或者覆盖了。
判断重写:
参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
返回的类型必须一直与被重写的方法的返回类型相同。
访问修饰符的限制一定要大于被重写方法的访问修饰符。
重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。
重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。
例子如下
class Person4{
String name;
int age;
public Person4(String name, int age) {
this.name = name;
this.age = age;
}
void show(){
System.out.println("name="+name+",age="+age);
}
}
class Student extends Person4{
private String school;
public Student(String name, int age, String school) {
super(name, age);
this.school = school;
}
void show(){
System.out.println("name="+name+",age="+age+",school="+school);
}
}
public class TestExtendPerson {
public static void main(String[] args) {
Person4 p = new Person4("zhangsan",10);
Student s = new Student("lisi",20,"beijing");
p.show();
s.show();
}
}
/*name=zhangsan,age=10
name=lisi,age=20,school=beijing*/
重写和重载的区别在于
重写要求参数签名必须一致,而重载要求参数签名必须不一致;
重写要求返回类型必须一致,而重载对此没有限制;
重写只能用于子类重写父类的方法,重载可以用于同一类中的所有方法。
重写只能用于子类重写父类的方法,重载可以用于同一类中的所有方法。
重载:
多个同名函数同时存在,具有不同的参数个数或者参数类型。
多个同名函数同时存在,具有不同的参数个数或者参数类型。
重载是一个类中多态性的一种表现。
特点:
方法名要一样,但是参数类型或者个数不一样,返回值类型可以相同也可以不同。
方法名要一样,但是参数类型或者个数不一样,返回值类型可以相同也可以不同。
不能以返回类型作为重载函数的区分标准。
重载必须有不同的参数列表;
可以有不同的访问修饰符;
可以又不同的返回类型,只要参数列表不同;
可以又不同的返回类型,只要参数列表不同;