创建默认继承构造器报错:子类构造器中new Date()标红求助
问题描述
我正在编写一个继承自Person基类的Employee对象类,尝试使用this()实现无参默认构造器,但在创建默认Date对象时,代码new Date()一直标红(已尝试在Date构造器中传入其类的实例变量),代码如下:
public class Employee extends Person { private Date hireDate; public Employee() { this("No name", new Date() ); //THIS IS RED } }
原因及解决办法
原因1:Date类导入错误或未导入
Java有两个常用Date类:
java.util.Date:支持无参构造,可直接new Date()实例化java.sql.Date:没有无参构造,必须传入long类型时间戳
若导入java.sql.Date或未导入Date类,编译器会因无法识别合法构造器标红。
解决办法:
- 若用JDK自带日期类,在代码顶部添加:
import java.util.Date; - 若需用
java.sql.Date,改为传入时间戳:new Date(System.currentTimeMillis())
原因2:Employee类缺少对应带参构造器
this("No name", new Date())是调用Employee自身接收String和Date的构造器,若未定义该构造,编译器会报错,连带new Date()标红。
解决办法:
在Employee类中补充对应构造器,示例:
public class Employee extends Person { private Date hireDate; public Employee() { this("No name", new Date()); } // 新增带参构造器 public Employee(String name, Date hireDate) { super(name); // 需确保Person类有接收String的构造器 this.hireDate = hireDate; } }
原因3:自定义Date类构造器不符合要求
若你自定义了Date类而非使用JDK自带的,需检查:
- 类中是否存在无参构造器
- 构造器访问修饰符是否为public(确保Employee可访问)
解决办法:
调整自定义Date类的构造器,示例:
public class Date { // 确保存在可访问的无参构造器 public Date() { // 自定义构造逻辑 } }
内容的提问来源于stack exchange,提问作者Daniel Rojas
相关产品推荐
相关产品推荐

