📜  Java |继承|问题5(1)

📅  最后修改于: 2023-12-03 14:42:17.414000             🧑  作者: Mango

Java | 继承 | 问题5

介绍

继承是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编程的学习和实践非常有帮助。