【java】super 关键字如何使用
程序员文章站
2022-04-15 18:31:38
super 关键字的作用:➢ 调用父类的构造方法;➢调用父类的成员方法;需要注意:super 只能应用在成员方法和构造方法中,不能应用在静态方法中(和 this 是一样的),如果在构造方法中使用必须放在第一行 。为什么会有 super 关键字?➢因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类, 没有父,也就没有子;➢有时需要在子类中显示的调用父类的成员方法。那么我们以前为什么没有看到 super,而且我们也有继承,如:Student 继承了 Pers......
super 关键字的作用:
➢ 调用父类的构造方法;
➢ 调用父类的成员方法;
需要注意:super 只能应用在成员方法和构造方法中,不能应用在静态方法中(和 this 是一样的),如果在构造方法中使用必须放在第一行 。
为什么会有 super 关键字?
➢因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类, 没有父,也就没有子;
➢有时需要在子类中显示的调用父类的成员方法。
那么我们以前为什么没有看到 super,而且我们也有继承,如:Student 继承了 Person?
➢因为子类中我们没有显示的调用构造方法,那么他会默认调用父类的无参构造方 法,此种情况下如果父类中没有无参构造方法,那么编译时将会失败。
注意构造方法不存在覆盖的概念,构造方法可以重载。
1、调用默认构造方法
public class SuperTest01 {
public static void main(String[] args) {
Person student = new Student();
}
}
class Person {
//学号
private int id;
//姓名
private String name;
//性别
private boolean sex;
//地址
private String address;
//年龄
private int age;
public Person() {
//System.out.println(this);
System.out.println("----------Person-----------");
}
//设置学号
public void setId(int studentId) {
id = studentId;
}
//读取学号
public int getId() {
return id;
}
public void setName(String studentName) {
name = studentName;
}
public String getName() {
return name;
}
public void setSex(boolean studentSex) {
sex = studentSex;
}
public boolean getSex() {
return sex;
}
public void setAddress(String studentAddress) {
address = studentAddress;
}
public String getAddress() {
return address;
}
public void setAge(int studentAge) {
if (studentAge >=0 && studentAge <=120) {
age = studentAge;
}
}
public int getAge() {
return age;
}
}
class Student extends Person {
//班级编号 private int classesId;
public Student() {
//System.out.println(this);
//显示调用父类的构造方法
//调用父类的无参的构造函数
//super();
System.out.println("--------Student----------");
//编译错误,必须将 super 放到构造函数的第一语句
//必须先创建父类,才能创建子类
//super();
}
public void setClassesId(int classesId) {
this.classesId = classesId;
}
public int getClassesId() {
return classesId;
}
}
关于构造方法的执行顺序,先执行父类的再执行子类的,必须完成父类的所有初始化,才能创建子类。
2、调用带参数的构造方法
//父类构造方法
public Person(int id, String name, boolean sex, String address, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.address = address;
this.age= age;
}
//子类中
//手动调用调用带参数的构造函数
super(id, name, sex, address, age);
3、采用 super 调用父类的方法
//父类中
public void printInfo() {
System.out.println("id=" + id + ", name=" + name + ",sex=" + sex + ", address=" + address + ", age=" + age);
}
//子类中
public void printInfo() {
//System.out.println("id=" + getId() + ", name=" + getName() + ",sex=" + getSex() + ",
//address=" + getAddress() + ", age=" + getAge() + ", workYear=" + workYear);
System.out.println("workYear=" + workYear);
//采用 super 调用父类的方法
super.printInfo();
}
本文地址:https://blog.csdn.net/Zhouzi_heng/article/details/110259291
上一篇: RabbitMQ 基础知识总结