Java子类实例化总是默认调用父类的无参构造操作

 更新时间:2020年10月20日 10:05:29   作者:zx33699659  
这篇文章主要介绍了Java子类实例化总是默认调用父类的无参构造操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

子类实例化时,默认调用父类的无参构造方法(不管子类的构造器有没有参数,因为子类继承的是父类的属性和方法,只调用父类的无参构造器就可以继承父类的属性和方法,因此不会调用父类的有参构造器),再调用子类的有参/无参构造器。

示例:

package classTest;
class Father {
 public Father(){
 System.out.println("父类的无参构造方法");

 }
 public Father(int a ) {
 System.err.println("父类的有参构造方法"+a);
 } 
}
class Son extends Father{
 public Son() {
 System.out.println("子类中的无参构造方法");
 }
 public Son(int a ) {
  System.out.println("子类中的有参构造方法"+a);
 } 
}

public class TestExecute {
 public static void main(String[] args) {
 Son s = new Son();
 System.out.println("---------------");
 Son a = new Son(5); 
 }
}

结果:

父类的无参构造方法

子类中的无参构造方法

---------------

父类的无参构造方法

子类中的有参构造方法5

补充知识:JAVA父类和子类的构造函数之间的关系

我就废话不多说了,大家还是直接看代码吧~

class SuperClass {
 private int n;
 SuperClass(){ //父类的无参构造器
  System.out.println("SuperClass()");
 }
 SuperClass(int n) { //父类的带参构造器
  System.out.println("SuperClass(int n)");
  this.n = n;
 }
}
class SubClass extends SuperClass{ 
 private int n;
 
 SubClass(){ //子类的无参构造器
  super(300);//调用父类的带参构造器,super(300)相当于SuperClass(300)
  System.out.println("SubClass");
 } 
 
 public SubClass(int n){ //子类的带参构造器
  System.out.println("SubClass(int n):"+n);
  this.n = n;
 }
}
public class TestSuperSub{
 public static void main (String args[]){
  SubClass sc = new SubClass();
  SubClass sc2 = new SubClass(200); 
 }
}

这个实例的输出结果是:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

从这个实例得到的结果是(个人见解):子类在构造时,会根据主函数中是否传入参数来选择使用无参构造器 or带参构造器,在这个实例中:

当子类调用的是无参构造器时,若父类的构造器是带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

当子类调用的是带参构造器时,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

以上这篇Java子类实例化总是默认调用父类的无参构造操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java httpClient连接池支持多线程高并发的实现

    Java httpClient连接池支持多线程高并发的实现

    本文主要介绍了Java httpClient连接池支持多线程高并发的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Boot集成Milvus快速入门demo示例详解

    Spring Boot集成Milvus快速入门demo示例详解

    Milvus是一种高性能向量数据库,支持从笔记本到大型分布式系统的多环境运行,它以开源和云服务形式提供,是LFAI & Data Foundation的项目,采用Apache 2.0许可,Milvus特别支持高并行化和解耦的系统架构,使其能够随数据增长而扩展,支持各种复杂搜索功能,满足企业级AI应用需求
    2024-09-09
  • Java中的代理原理及代理使用示例

    Java中的代理原理及代理使用示例

    这篇文章主要介绍了Java中的代理原理及代理使用示例,本文讲解了Java Socket编程中加入代理的2种方法,需要的朋友可以参考下
    2015-03-03
  • Java程序开发中abstract 和 interface的区别详解

    Java程序开发中abstract 和 interface的区别详解

    abstract class和interface在Java语言中都是用来进行抽象类。但是两者有什么区别呢,接下来小编给大家带来了abstract 和 interface的区别详解,感兴趣的朋友一起学习吧
    2016-06-06
  • 一文详解如何在Java中启动线程

    一文详解如何在Java中启动线程

    今天要跟大家聊一聊Java多线程的原理和使用方式,Java多线程是提高程序性能的重要机制,了解线程生命周期、同步机制、线程池和线程间通信等概念,可以帮助我们编写出高效、可靠的多线程程序,需要的朋友可以参考下
    2024-07-07
  • SpringBoot从yml配置文件中读常用参数值实例方法

    SpringBoot从yml配置文件中读常用参数值实例方法

    在本篇文章里小编给大家整理了关于SpringBoot从yml配置文件中读常用参数值实例方法,有需要的朋友们学习下。
    2019-12-12
  • 浅谈SpringBoot 中关于自定义异常处理的套路

    浅谈SpringBoot 中关于自定义异常处理的套路

    这篇文章主要介绍了浅谈SpringBoot 中关于自定义异常处理的套路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 浅谈Java向下转型的意义

    浅谈Java向下转型的意义

    这篇文章主要介绍了浅谈Java向下转型的意义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Mybatis-plus如何更新Null字段详解

    Mybatis-plus如何更新Null字段详解

    MyBatis-plus在进行更新操作时不会更新传入实体中为null或默认值属性字段,只更新不为null的值、非默认值的属性字段,这篇文章主要给大家介绍了关于Mybatis-plus如何更新Null字段的相关资料,需要的朋友可以参考下
    2023-07-07
  • 项目依赖Springboot jar失败解决方案

    项目依赖Springboot jar失败解决方案

    这篇文章主要介绍了项目依赖Springboot jar失败解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论