多选题
关于构造函数下面哪俩个选项的叙述是正确的?
A
super()或者this()必须放在构造函数中的第一句
B
如果父类的构造函数没有参数,那么子类的构造函数一定没有参数
C
构造函数不能被继承
D
构造函数不能被重载
答案解析
正确答案:AC
解析:
解析以下关于构造函数的各个选项以及为什么选择A和C作为正确答案:
A. super()或者this()必须放在构造函数中的第一句
解析:在Java中,如果一个构造函数需要调用父类的构造函数(使用super()),或者需要调用同一个类的另一个构造函数(使用this()),那么这样的调用必须是构造函数中的第一条语句。这是为了确保在子类或当前类的实例被进一步初始化之前,父类或者当前类的其他构造函数能够首先执行。因此,A选项是正确的。
B. 如果父类的构造函数没有参数,那么子类的构造函数一定没有参数
解析:这个叙述是错误的。父类的构造函数是否有参数,并不影响子类构造函数的参数列表。子类可以定义自己的构造函数,并且这些构造函数可以有自己的参数列表,无论父类的构造函数是否有参数。子类构造函数在需要时可以调用父类的无参构造函数(使用super()),也可以不调用(如果父类有一个默认的无参构造函数)。但这并不意味着子类构造函数不能有参数。因此,B选项是错误的。
C. 构造函数不能被继承
解析:构造函数不是类成员,它们不能被继承。子类可以通过调用父类的构造函数来初始化父类的部分,但这不是继承构造函数本身。每个类都必须有自己的构造函数来初始化它的实例。因此,C选项是正确的。
D. 构造函数不能被重载
解析:这个叙述是错误的。在Java中,构造函数是可以被重载的。这意味着一个类可以有多个构造函数,只要它们的参数列表不同。重载的构造函数允许创建类的实例时以不同的方式初始化。因此,D选项是错误的。
综上所述,正确的选项是A和C。
A. super()或者this()必须放在构造函数中的第一句
解析:在Java中,如果一个构造函数需要调用父类的构造函数(使用super()),或者需要调用同一个类的另一个构造函数(使用this()),那么这样的调用必须是构造函数中的第一条语句。这是为了确保在子类或当前类的实例被进一步初始化之前,父类或者当前类的其他构造函数能够首先执行。因此,A选项是正确的。
B. 如果父类的构造函数没有参数,那么子类的构造函数一定没有参数
解析:这个叙述是错误的。父类的构造函数是否有参数,并不影响子类构造函数的参数列表。子类可以定义自己的构造函数,并且这些构造函数可以有自己的参数列表,无论父类的构造函数是否有参数。子类构造函数在需要时可以调用父类的无参构造函数(使用super()),也可以不调用(如果父类有一个默认的无参构造函数)。但这并不意味着子类构造函数不能有参数。因此,B选项是错误的。
C. 构造函数不能被继承
解析:构造函数不是类成员,它们不能被继承。子类可以通过调用父类的构造函数来初始化父类的部分,但这不是继承构造函数本身。每个类都必须有自己的构造函数来初始化它的实例。因此,C选项是正确的。
D. 构造函数不能被重载
解析:这个叙述是错误的。在Java中,构造函数是可以被重载的。这意味着一个类可以有多个构造函数,只要它们的参数列表不同。重载的构造函数允许创建类的实例时以不同的方式初始化。因此,D选项是错误的。
综上所述,正确的选项是A和C。
相关知识点:
构造函数要点记俩
