📅  最后修改于: 2023-12-03 14:42:17.414000             🧑  作者: Mango
继承是Java对象之间的一种关系,通过继承可以实现代码的复用并且可以使程序结构更加清晰。继承是面向对象编程中最基本的概念之一,它允许新建的类从已有的类中继承属性和方法。在Java种,继承是通过extends关键字来实现的。
本篇文章主要介绍继承中的一个问题,即子类如何调用父类的构造函数。
在Java中,如果一个类需要继承另一个类,那么就需要在子类中调用父类的构造函数。在子类中调用父类的构造函数需要用到super关键字。子类的构造函数中必须有一个super()的语句,如果子类中没有指定super关键字,Java编译器将自动加上一个不带参数的super()。如下所示:
public class ParentClass {
public ParentClass(String parentName) {
System.out.println("ParentClass的构造函数被调用");
}
}
public class ChildClass extends ParentClass {
public ChildClass() {
// 子类的构造函数中必须有一个super()语句
// 如果子类中没有指定super关键字,Java编译器将自动加上一个不带参数的super()
super("ParentName");
System.out.println("ChildClass的构造函数被调用");
}
}
在上述代码中,ChildClass继承了ParentClass,ChildClass的构造函数中调用了ParentClass的构造函数,这里传递了一个参数"ParentName",可以看到在执行ChildClass的构造函数之前,ParentClass的构造函数被先执行了。
需要注意的是,如果ParentClass没有不带参数的构造函数,那么在子类中就必须显式调用ParentClass中的有参构造函数。如下所示:
public class ParentClass {
// 有参构造函数
public ParentClass(String parentName) {
System.out.println("ParentClass的构造函数被调用");
}
}
public class ChildClass extends ParentClass {
// 此时就必须显式调用ParentClass中的有参构造函数
public ChildClass(String childName) {
super("ParentName");
System.out.println("ChildClass的构造函数被调用");
}
}
其中super("ParentNmae");就是显式调用ParentClass中的有参构造函数。
子类如何调用父类的构造函数是继承中的一个重要问题,通过本文的介绍,可以了解到子类必须在构造函数中显式调用父类的构造函数,并且需要注意父类是否有不带参数的构造函数。对于这个问题的了解,对于Java编程的学习和实践非常有帮助。