为什么我们可以在子类构造函数中调用超类方法?

时间:2015-06-23 15:54:13

标签: java

我需要更好地解释这种情况。 我不知道这是否是Java语言本身提供的功能

//super class
public class Student {
    public Student(){}

    public void display(){
        System.out.println("Hello from Student");
    }       

}

//Subclass
public class SeniorStudent extends Student {

    public SeniorStudent(){
        super();
        display();
    }

    public static void main(String[] args) {
        SeniorStudent st=new SeniorStudent();
    }
}

运行程序时,会调用display()方法。 这里的逻辑是什么?

1 个答案:

答案 0 :(得分:0)

您在子类中调用display方法,但如果不重写display()方法,它会自动调用父类。类的构造是在类中执行的第一部分。你的软件下的逻辑是:

  • 开始执行创建seniorStudent新实例的主要方法
  • 已调用SeniorStudent构造函数并开始执行
  • SeniorStudent的构造函数做的第一件事就是调用父构造函数(什么都不做)
  • 然后执行完整的父构造函数resume来执行您调用display方法的SeniorStudent构造函数,但是SeniorStudent类没有任何显示方法,所以调用它的父显示方法。

因此,如果您想在控制台中打印“来自高年级学生的Hello”,您必须更改此类高年级学生课程

    public class SeniorStudent extends Student {

    public SeniorStudent(){
        super();
        display();
    }
    public void display(){
      system.out.println("Hello from senior Student");
    }

    public static void main(String[] args) {
        SeniorStudent st=new SeniorStudent();
    }
}

如果你把super.display()放在来自SeniorStudent类的display方法中你调用父显示方法然后执行高级学生显示方法,那么输出就像

"Hello from Student"
"Hello from Senior Student"

希望我很清楚,但如果你有问题,我很乐意帮助你