Java理论测试疑问:调用不存在的父类构造器为何选项A不正确?
关于Java继承构造器调用的问题解答
首先咱们得把Java构造器的默认规则掰扯清楚,这是搞懂这个题的核心:
- 当一个类没有显式定义任何构造器的时候,Java编译器会自动帮它生成一个无参的默认构造器,而且这个构造器的访问权限和类本身的访问权限一致。比如题目里的
Shape类是public的,那它的默认构造器也是public的,完全可以被子类调用。
现在逐个看选项:
选项A:
class Circle extends Shape{ Circle(){ super(); } }
这段代码完全合法。super()就是显式调用父类Shape的默认无参构造器,完美符合题目要求的“在构造器中调用Shape类的构造器”。而且就算你不主动写super(),编译器也会自动在子类构造器的第一行插入这行代码,这里只是把它显式写出来而已。选项B:“无法调用Shape类的构造器,因为它不存在”
这个说法是错误的。Shape类虽然没有显式编写构造器,但编译器已经悄悄为它生成了一个默认的无参构造器,它是真实存在的。
所以正确答案应该是A,那些认为答案是B的朋友,大概率是误解了Java默认构造器的规则——以为只有显式写出来的构造器才算数,但实际上编译器会自动帮我们补全默认构造器哦。
内容的提问来源于stack exchange,提问作者raporoid
相关产品推荐
相关产品推荐

