Java中super关键字的用法(构造方法的继承调用)

今天来谈一下super的用法以及使用时应该注意的事项。
下面先列举出容易出错的地方:
图一
在这里插入图片描述
图一中第十五行编译报错:There is no default constructor available in ‘AddClass’(这里缺少缺省函数),在处理这个问题时有以下两个解决方法:
第一种:从这个错误的翻译来看,函数里面缺少缺省函数,那么什么是缺省函数呢?缺省即系统默认状态,意思与“默认”相同。所以缺省函数就是系统默认的无参的构造函数,所以我们就可以通过在第三行增加一个默认的无参构造函数就行了,并且函数也不需要任何方法,只是一个空的方法体就行;
第二种:一般来说,在子类的构造函数中都会用到父类的构造方法的,所以第一种添加一个无参的构造函数就没有任何用处了。这个时候,我们就会用到在super函数了。它是java中构造方法的继承调用中很重要的一个函数。除非是像上述一样不需要使用父类的非默认构造函数,其他情况下时一定要使用super函数来调用父类的构造函数的。

图二在这里插入图片描述
(1)在图二里面写了一个AddClass父类和SonAddClass子类。其中父类里面写了三个参数不同的构造函数,在子类的构造函数中写了AddClass();但是编译却报错There is no default constructor available in ‘AddClass’(缺少缺省函数,上面提到过,并提示插入super)
解决方法:Java中调用父类的构造函数必须要使用super函数(缺省函数除外。所以正确的用法应该写super(x),或者其他的父类的构造函数。
图三
在这里插入图片描述
图三这里虽然使用了super函数,但是仍然报错,错误为Call to ‘super()’ must be first statement in constructor body,意思是对“super()”的调用必须是构造函数体中的第一个语句。这个解释的就很清楚了,super应该放在构造函数的第一个语句。所以解决方法也很简单,直接把super(x)的位置放在a=x的前面就行了。
下面是构造函数的继承调用方法总结:
1.子类的构造方法必定调用父类的构造方法。如果不显式调用super方法,必然隐含调用super(即调用缺省函数)。super调用语句必须是子类构造方法的第一个可执行语句。
图四
在这里插入图片描述图四是正确的子类构造函数继承方法(当使用super显式调用父类构造函数时,第三行的缺省函数可以忽略不写。
(本人java初学者一个,如有错误,敬请斧正,谢谢!)


版权声明:本文为jhr2333原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。