赞
赏
如果子类想调用父类的构造方法,普通方法和属性,就可以使用 super 关键字。如果是调用父类的构造方法,super 和 this 关键字一样,需要放在子类的构造方法首行。
super.构造方法/属性/方法
参数 | 描述 |
---|---|
super | 使用 super 时用到的关键字 |
. | 在使用 super 后面需要追加. |
super 表示调用父类中具有 权限 的属性或者方法。
我们定义一个人父类,然后定义一个学生类作为子类,让学生类调用父类里面的构造方法,属性和方法。
我们定义一个 Person
的父类。
package com.haicoder.net.haisuper;
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getInfo() {
return "姓名 : " + this.getName() + " 年龄 :" + this.getAge();
}
}
定义一个学生的子类:
package com.haicoder.net.haisuper;
public class Student extends Person {
private String school;
public Student(String name, Integer age, String school) {
super(name, age);
this.school = school;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getInfo() {
return "姓名 : " + this.getName() + " 年龄 :" + this.getAge() + " 学校 : " + this.getSchool();
}
}
定义一个测试类:
package com.haicoder.net.haisuper;
public class SuperTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
Student student = new Student("嗨客", 21, "嗨客大学");
System.out.println(student.getInfo());
}
}
运行结果如下:
在例子中,我们用到了 this 关键字,也将子类里面的 info 方法进行了覆盖 ,我们发现 student 里面的构造方法调用了父类的构造方法,然后单独的给 school 这个字段进行了赋值。
我们对学生信息进行打印输出的时候,发现父类构造函数赋值的语句都被执行了,我们能够获取到相关信息。
区别点 | this | super |
---|---|---|
属性访问 | 访问本类中的属性,如果本类中没有属性就从父类中查找 | 访问父类中的属性 |
方法 | 访问本类中的方法,如果本类中没有就访问父类中的方法 | 访问父类中的方法 |
调用构造 | 调用本类的构造,必须放在构造函数首行 | 调用父类构造,必须放在子类构造方法首行 |
特殊 | 表示当前对象 | 没有这样的概念 |
super 表示访问父类中的方法或者属性或者构造方法。必须要放在子类里面调用。