java super关键字,super调用父类构造方法详解

KLQ 2020-09-02 15:12:35 java常见问答 7138

因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解。

super关键字能够用来访问父类的构造方法、普通方法和属性。

super关键字功能:

super调用父类构造方法

super关键字可以在子类的构造方法中显式地调用父类的构造方法。

下面是基本格式:(parameter-list 指定了父类构造方法中的所有参数,super( )必须是在子类构造方法的方法体的第一行)

super(parameter-list);

示例:

声明父类Person和子类Student,在Person类中定义一个带有参数的构造方法。

public class Person
{
    public Person(String name)
    {}
}
public class Student extends Person
{}

会发现Student类出现编译错误,提示必须显式定义构造方法。(错误信息):

Implicit super constructor Person() is undefined for default constructor. Must define an explicit constructor

JVM默认给Student类加了一个无参构造方法,而在这个方法中默认调用了super(),但是Person类中并不存在该构造方法,所以会编译错误。

假如,一个类中没有写任何的构造方法,JVM会生成一个默认的无参构造方法。

在继承关系中,因为,在子类的构造方法中,第一条语句默认为调用父类的无参构造方法(即默认为 super(),一般这行代码省略了)。

所以当在父类中定义了有参构造方法,但是没有定义无参构造方法时,编译器会强制要求我们定义一个相同参数类型的构造方法。

示例:

声明父类Person,类中定义两个构造方法:

public class Person
{
    public Person(String name, int age)
    {}
    public Person(String name, int age, String sex)
    {}
}

子类Student继承了Person类,使用super语句来定义Student类的构造方法:

public class Student extends Person
{
    public Student(String name, int age, String birth)
    {
        super(name, age); // 调用父类中含有2个参数的构造方法
    }
    public Student(String name, int age, String sex, String birth)
    {
        super(name, age, sex); // 调用父类中含有3个参数的构造方法
    }
}

Student类构造方法代码可以看出,super可以用来直接调用父类中的构造方法,使编写代码也更加简洁方便。

编译器会自动在子类构造方法的第一句加上super();来调用父类的无参构造方法,必须写在子类构造方法的第一句,也可以省略不写。

通过super来调用父类其它构造方法时,只需要把相应的参数传过去。

更多java基础知识,请继续通过本站来进行了解和学习吧。

推荐阅读:

java继承(extends)简单介绍

java继承(extends)实例分享

java继承(extends),单继承简单介绍