Java方法覆盖重写实现原理解析
当子类继承自父类并且重写了父类中的某个方法,那么子类的方法就覆盖了父类的方法,称为方法的重写。方法重写是Java中实现多态的关键。本文将详细讲解Java方法覆盖重写的实现原理。
原理
方法覆盖重写是实现多态的一种重要方式。实现方法覆盖重写需要满足两个条件:
- 子类中的方法必须和父类中的方法有相同的名称、参数列表和返回值类型。
- 子类中的方法的访问修饰符要高于或等于父类中的方法。
当一个对象调用被重写的方法时,Java虚拟机会在运行时根据对象的实际类型来确定调用哪个方法。这就是多态的体现。
示例一
public class Person {
public void say() {
System.out.println("I am a person.");
}
}
public class Student extends Person {
public void say() {
System.out.println("I am a student.");
}
}
public class Test {
public static void main(String[] args) {
Person p = new Student();
p.say();
}
}
以上代码中,Student
类继承自Person
类,并且重写了Person
类中的say
方法。在Test
类中,我们将Person
对象指向了一个Student
对象,并调用了say
方法。
因为p
是一个Person
类型的引用,但是它引用的对象是Student
类型的,所以调用p.say()
时,实际调用的是Student
中重写的say
方法,输出结果为:I am a student.
示例二
public class Person {
public void say() {
System.out.println("I am a person.");
}
}
public class Student extends Person {
public void say() {
System.out.println("I am a student.");
}
}
public class Teacher {
public void say() {
System.out.println("I am a teacher.");
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Student();
p1.say();
Person p2 = new Teacher();
p2.say();
}
}
以上代码中,我们创建了一个Student
对象和一个Teacher
对象,分别赋给了Person
对象p1
和p2
。在调用say
方法时,p1.say()
会调用Student
中的重写方法,输出结果为:I am a student.
而p2.say()
会调用Teacher
中的say
方法,输出结果为:I am a teacher.
这就是多态的体现,同一个方法在不同的对象上表现出不同的行为。
结论
Java的方法覆盖重写是实现多态的一种重要方式,在调用被重写的方法时,Java虚拟机会根据对象的实际类型来决定调用哪个方法。同时,在重写一个方法时,子类方法的名称、参数列表和返回值类型必须和父类相同,访问修饰符不能低于父类方法的访问修饰符。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java方法覆盖重写实现原理解析 - Python技术站