java中,当实例化子类时会递归调用父类中的构造方法。这个说法对么?为啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,当实例化子类时会递归调用父类中的构造方法。这个说法对么?为啥相关的知识,希望对你有一定的参考价值。
不对,原因在于当实例化子类时会递归调用父类中的构造方法。
C语言中的递归
计算阶乘的代码
long fact(long n)
if(n==0||n==1) return 1L;
else return n*fact(n-1);
这个函数叫做fact,它自己调用自己,这个就是一个典型的递归调用,调用过程类似一个栈。
注: 主调函数又是被调函数。执行递归函数将反复调用其自身。 每调用一次就进入新的一层。
扩展资料:
一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要将所有的实参、返回地址等信息传递给被调用函数保存;为被调用函数的局部变量分配存储区;将控制转移到被调函数的入口。
如果不满足递归终止的条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化。
参考技术A 扣字眼没多大意思,对于递归,就是不断的调用方法自己,至于你说的调用父类的构造方法,明显就不是递归啦. 但是习惯上我们还是说递归调用父类构造,所指的意思是不一样的 参考技术B 对啊,是会调用父类的构造函数 参考技术C 不对,不是递归 参考技术D 是对的super关键字
Super关键字:
1.子类实例化过程中父类中的构造器先被调用,然后再调用子类的构造器。
2.子类通过构造器实例化时要调用父类的默认构造器,是隐含的调用了super()这个方法,但是如果子类的构造器中调用了父类中的有参数的构造器,那么无参数
的构造器就不会被调用了;
3.super()的调用必须要放在方法的第一行;
4.super可以表示父类的引用,我们可以使用super和this来区分父类和子类中同名的属性,在子类中访问属性的查找顺序首先在子类中查找制定的属性名字,如果在
子类中没有该属性,那么就去父类中去查找该属性,方法也是一样的。当父类和子类有同样的方法时通过子类调用这个相同的方法时调用的是子类的方法。但是我们可以通过
super对父类的引用来调用父类的方法。
以上是关于java中,当实例化子类时会递归调用父类中的构造方法。这个说法对么?为啥的主要内容,如果未能解决你的问题,请参考以下文章
JAVA-初步认识-第九章-继承-子父类中的构造函数-子类的实例化过程
在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?