Java实现子类自动调用父类无参构造函数

 更新时间:2026年01月30日 16:03:10   作者:妄念ol  
子类在Java中创建对象时,会自动调用父类的无参构造函数,如果父类只有有参构造函数,而子类没有使用`super()`显式调用父类构造函数,编译器会报错,因此,建议在类中总是定义无参构造函数以避免潜在的错误

Java子类自动调用父类无参构造函数

今天在刷题的时候看到一道题

public class A {
    public A() {//父类A的无参构造函数
        System.out.println("A");
    }
}
public class B extends A{
    public B() {//子类B的无参构造函数
        System.out.println("B");
    }
}
public class TestAB {
    public static void main(String[] args) {
        A a = new A();//创建一个A类对象
        B b = new B();//创建一个B类对象
    }
}

问题是输出的结果是什么,我下意识觉得太简单了,这不就是AB嘛,创建一个A类对象时去调用A的无参构造函数,输出A;

创建一个B类对象时去调用B的无参构造函数,由于我下意识地认为子类B的无参构造函数没有super(),我就认为它不会去调用父类A的无参构造函数,所以我的结果是B。

当然我错了,结果是AAB。

下面的例子可以说明这个问题

public class A {
    public A(int a) {
        System.out.println("A");
    }
}
public class B extends A{
    public B() {
        System.out.println("B");
    }
}
public class TestAB {
    public static void main(String[] args) {
        A a = new A(1);
        B b = new B();
    }
}

结果是:

原因就是在去创建子类对象时

它自动去调用父类的无参构造函数,由于A类只有一个有参构造函数,所以没有找到,编译错误。

当我们在子类中使用super(XXX),去调用父类有参构造函数就可以解决。

代码如下:

public class B extends A{
    public B() {
        super(1);
        System.out.println("B");
    }
}

从这里我们还应该能看出,当我们在一个类中定义了自己的带参数的构造方法的时候,必须把无参构造函数定义一下。

用我们老师的话来说就是:不管什么时候,不管能不能用到,先把无参构造函数写出来,避免出错。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot集成tk.mybatis实践

    SpringBoot集成tk.mybatis实践

    本文主要介绍了SpringBoot集成tk.mybatis的步骤,包括添加依赖、配置数据源、创建实体类与Mapper接口、启动类添加注解、使用Mapper等,还涉及对象与数据库记录映射、Example的应用、分页(使用PageHelper和RowBounds)等内容
    2026-04-04
  • 零基础写Java知乎爬虫之进阶篇

    零基础写Java知乎爬虫之进阶篇

    前面几篇文章,我们都是简单的实现了java爬虫抓取内容的问题,那么如果遇到复杂情况,我们还能继续那么做吗?答案当然是否定的,之前的仅仅是入门篇,都是些基础知识,给大家练手用的,本文我们就来点高大上的东西
    2014-11-11
  • Spring AI内置DeepSeek的详细步骤

    Spring AI内置DeepSeek的详细步骤

    Spring AI 最新快照版已经内置 DeepSeek 了,所以以后项目中对接 DeepSeek 就方便多了,但因为快照版会有很多 Bug,所以今天咱们就来看稳定版的 Spring AI 如何对接 DeepSeek 满血版,感兴趣的小伙伴跟着小编一起来看看吧
    2025-02-02
  • SpringBoot实现文件上传下载功能小结

    SpringBoot实现文件上传下载功能小结

    最近做的一个项目涉及到文件上传与下载功能。SpringBoot后台如何实现文件上传下载呢?下面有单文件上传和多文件上传功能,感兴趣的朋友一起看看吧
    2017-08-08
  • 解析Orika的MapperFacade 属性赋值的使用问题

    解析Orika的MapperFacade 属性赋值的使用问题

    在我们实际开发中,常常会有对象与对象之间的转化,或者把一个对象的数据转化到另一个数据之中,如果我们手动的一个一个的set就会比较麻烦,代码段看起来也会比较长。而Orika的MapperFacade就是解决这个问题的,实现对象属性的复制
    2021-12-12
  • Spring boot配置 swagger的示例代码

    Spring boot配置 swagger的示例代码

    Swagger是一组开源项目,Spring 基于swagger规范,可以将基于SpringMVC和Spring Boot项目的项目代码,自动生成JSON格式的描述文件,接下来通过本文给大家介绍Spring boot配置 swagger的示例代码,一起看看吧
    2021-09-09
  • Mybatis原始执行方式Executor代码实例

    Mybatis原始执行方式Executor代码实例

    这篇文章主要介绍了Mybatis原始执行方式Executor代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Flutter瀑布流仿写原生的复用机制详解

    Flutter瀑布流仿写原生的复用机制详解

    这篇文章主要给大家介绍了关于Flutter瀑布流仿写原生的复用机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用flutter具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • IDEA实现纯java项目并打包jar的步骤(不使用Maven,Spring)

    IDEA实现纯java项目并打包jar的步骤(不使用Maven,Spring)

    在Java开发中我们通常会将我们的项目打包成可执行的Jar包,以便于在其他环境中部署和运行,这篇文章主要介绍了IDEA实现纯java项目并打包jar(不使用Maven,Spring)的相关资料,需要的朋友可以参考下
    2025-08-08
  • spring boot对IP地址设置黑白名单的项目实践

    spring boot对IP地址设置黑白名单的项目实践

    本文主要介绍了spring boot对IP地址设置黑白名单的项目实践,通过YML配置文件定义过滤器类并注册FilterConfig来实现访问控制,具有一定的参考价值,感兴趣的可以了解一下
    2025-07-07

最新评论