Java类未自定义构造函数,为何能通过带参构造实例化对象?
问题解答
核心结论
Java不存在自动生成多参数构造函数的隐式规则,你看到的调用不存在所谓的「隐藏构造函数」,属于题解代码展示不完整导致的误解。
具体原因分析
- 如果类没有显式声明任何构造函数,Java编译器只会自动生成一个无参空构造函数,绝对不会自动生成包含四个参数的构造函数,题目给出的
Node类定义直接运行的话,new Node(0, null, head, null)会直接报编译错误。 - 题解中可正常调用四参构造的常见原因有两个:
- 题解作者自行给
Node类补充了全参数构造函数,贴代码时只保留了题目给出的属性定义部分,遗漏了自己新增的构造函数实现。 - 题解作者使用了Lombok的
@AllArgsConstructor等注解,编译时会自动生成全参构造,贴代码时没有展示对应的注解声明。
- 题解作者自行给
合法实现方案
如果要在题目给出的Node类基础上实现等效的dummy节点创建,有两种常用方式:
- 补充四参构造函数
class Node { public int val; public Node prev; public Node next; public Node child; // 新增四参构造函数 public Node(int val, Node prev, Node next, Node child) { this.val = val; this.prev = prev; this.next = next; this.child = child; } } // 后续即可正常调用四参构造 Node dummy = new Node(0, null, head, null);
- 使用默认无参构造后手动赋值
// 编译器自动生成的无参构造创建实例,引用类型属性默认值为null Node dummy = new Node(); dummy.val = 0; dummy.next = head;
内容的提问来源于stack exchange,提问作者TheAlienMann
相关产品推荐
相关产品推荐

