Java无参构造函数类 java中无参构造函数

您所在的位置:网站首页 class函数必须从类构造函数内调用 Java无参构造函数类 java中无参构造函数

Java无参构造函数类 java中无参构造函数

2023-05-21 17:45| 来源: 网络整理| 查看: 265

本文为学习笔记,留作自用,不会记载的特别详细,如有错误,欢迎指正

 

1. 关于无参构造函数与有参构造函数

我们都知道如果不定义无参构造函数系统会自动调用默认构造函数

当我们定义了一个有参构造函数,就必须手动定义一个无参构造函数

这里来尝试分析下原因,首先要了解下构造函数的调用逻辑

Java无参构造函数类 java中无参构造函数_构造函数

 

上图中我们可以看出子类的构造函数将会递归优先调用父类方法的

无参构造函数,效果相当于

class GrandFather{ public GrandFather(){ super(); System.out.println("高层构造函数"); } } class Father extends GrandFather{ public Father(){ super(); System.out.println("中层构造函数"); } } class Son extends Father{ public Son(){ super(); System.out.println("底层构造函数"); } }

只不过这里将super给隐藏了,这是系统默认会执行的语句

我们可以发现,无参构造函数在申明时默认调用的是父类的无参构造函数。

加入我们把中间一层的无参构造函数去掉,并只申明一个有参构造函数。

此时,编译器将提醒我们存在编译错误:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor

强制要求我们申明Father类的无参构造函数,这是因为编译器认为,此时子类并不想走

父类的无参构造函数,但是又没有指明该走哪条路,这里的super()失效了,

所以我们可以给Son指出他的道路

Java无参构造函数类 java中无参构造函数_无参构造函数_02

 

 

只要显示的申明super(1),告诉子类递归走父类的哪一个构造函数即可。

由此可见,实际上一个类假如不作为父类,不申明无参构造函数并不会造成实际影响。

但我们并无法保证永远不作为子类这一前提,所以我们还是需要遵循规则去显示的申明。

值得注意的是,每个构造函数的首行如果没有显示的super父类构造函数,编译器将默认添加上super(),指向

父类的默认构造函数

Java无参构造函数类 java中无参构造函数_构造函数_03

 

 

在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。不能在构造方法以外的任何方法内调用构造方法。在一个构造方法内只能调用一个构造方法。

 

争取早日不再是一只菜鸡



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3