Java基础学习菜鸟入门第十二天——Java面向对象(六)方法的重写
程序员文章站
2024-03-17 08:05:46
...
Java面向对象——方法的重写
4.2方法的重写
4.2.1方法重写的条件
- 一定要发生继承关系
- 子类中的方法和父类中的方法同名
- 参数列表要一模一样
- 返回值类型一模一样
(对于目前阶段知识量来说,这些是重写的条件,后续可能会有改动)
4.2.2为什么要方法的重写?
- 在子类继承父类之后,不满足父类提供的功能,子类对于父类继承过来的某些方法可以进行重写(覆盖)。
- 对于父类的一些行为进行扩展
4.2.3方法重写的方式
代码演示:
public class Person{
String name;
int age;
public Person(){
System.out.println("父类的空构造器");
}
public int info(int num){
System.out.println("姓名:"+this.name+",年龄:"+this.age);
return 1;
}
}
public class Student extends Person{
int id;
public Student(){
System.out.println("子类的空构造器");
}
//方法的重写
@Override//注解
public int info(int num){
System.out.println("姓名:"+name+"年龄:"+age+"学号:"+id);
return 1;
}
}
public class Test01{
public static void main(String[] args){
//1:创建一个学生对象
Student stu=new Student();
stu.name="小莉李";
stu.age=18;
stu.id=1;
//2:调用对象的功能
stu.info(1);
}
}
- 如何判断父子关系下的两个类中的同名方法是否是重写:
- 在子类的同名方法上添加注解@Override,如果方法不报错,那么该方法是重写方法,反之则不是。
上述代码内存分析:
上述代码运行结果
父类的空构造器
子类的空构造器
姓名:小莉李年龄:18学号:1
- 调用子类对象的功能以及属性的时候,先在当前本类对象中进行查找,如果找到了则执行,如果没有找到去父类中进行查找。沿着继承链会一直往上找。
4.2.4方法重写中的this和super注意事项
//上述代码中的一部分
@Override
public int info(int num){
System.out.println("姓名:"+name+"年龄:"+age+"学号:"+id);
super.info(1);
//this.info(1)会出问题
return1;
}
**注意:**对于上述代码中的this.和super.不能混淆使用,原因是由于对于this.info(1)而言。调用的当前子类对象的方法,所以程序会成为一个死循环,一致无法退出。但是如果要调用父类的info()方法,需要通过super.去指向。