Java类中的无参构造函数的作用

参考文献:
https://www.jianshu.com/p/cf5ad29676da
https://blog.csdn.net/jdkorg/article/details/100405149

一、背景:
在学习安卓布局里的gridview时,才注意到源码里定义一个java类时会先构造一个无参的函数,一开始不是很理解为什么要多此一举,注释掉无参函数仍然可以编译运行;查了相关文档博客却说如果没定义无参函数会编译报错,因为无法回溯到object类...所以来梳理一下相关知识,也帮助自己理解

二、重要概念
在实例对象的时候,会不断的向上(父类)回溯,一直回溯到Object(),要想顺利的回溯到Object,就必须给指定一条通路,如果没有,就用默认的 super()。而通常情况下,这条直接回溯到Obkect()的通路就是无参构造函数。

三、编译会报错的场景:
当没有在子类里加super(),也没有在父类里构造无参函数

分析:编译器看到我们在父类里写了有参构造法方法,它就会认为,我们不想让子类在回溯的时候走默认的无参构造方法这条路【super(); 此路不通】,但是我们又没告诉给子类,它应该走哪条路(你给了有参就是告诉我不要走无参,但也没告诉我走有参,那走哪?),所以会报错。 所以,若父类没有提供无参构造方法,但是提供了有参构造方法,就要在子类的无参构造方法里,显示的加上调用父类的有参构造方法语句。 如:super(1);(这里就告诉了去走有参了)

四、为什么注释掉无参函数也还可以运行?
根据上述分析,可以明白,这种情况是当子类继承以后直接调用了有参函数,那就可以编译通过,但并不代表无参函数没有作用,可以理解为保障子类继承时可以回溯到object的一种机制。

五、总结:
1.无参构造运行是需要往上一级一级找无参,甚至找到object
2.如果其中一级只有有参,没有无参,会发生错误。但只有无参,没有有参一定不会出错。
3.在以后的Java开发中,若一个类要有带参构造方法,要记得先写无参构造方法。防止类追溯时找不到上级,报错。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务