1
public class Person
{
    private class Date
    {
        public Date(int month, int day, int year)
        {
            ...
        }
    }


    private String name;
    private Date birthDate;

    public Person(String name, Date birthDate)
    {
        ...
    }
}

上面,我有一个外部类 Person 和一个私有内部类 Date。Person 对象的构造函数应将 Date 作为其参数之一。

public class Test
{
    public static void main(String[] args)
    {
        Person testPerson = new Person("Mr. Sandman", new Date(1, 1, 1970));
    }
}

但是,当我尝试在单独的“测试”文件 Test.java(上图)(与我的 Person.java 文件位于同一文件夹中)中创建 Person 对象时,出现错误。

错误是这样的:“错误:没有为 Person(String,Date) 找到合适的构造函数”(编译器引用了我实例化 testPerson 的行作为错误的原因。)

问题:我做错了什么?另外,如何创建 Person 对象并将 Date 对象传递给 Person 的构造函数?(如果 Date 是 Person 的私有内部类,这是否可能?)

4

2 回答 2

4

Date是 的私有内部类Person,因此您将无法从另一个(非 Person)类创建它的实例。两件事情:

  • 为了使您当前的设计工作,将访问权限Date从私有更改为公共
  • 您还需要为Person该类创建一个默认构造函数,因为您需要它的一个实例来创建内部类。
  • 请考虑更改您的内部类名称。SDK中已经有一个Date类。

老实说,您应该Date按照其他人的建议将您的课程创建为独立课程。

于 2013-04-01T23:31:41.577 回答
0

您可以添加一个将 a作为第二个参数的新Person构造函数,并从该对象创建一个对象(可能通过一个对象)。java.util.DatePerson.Datejava.util.DateCalendar

你也可以让你现有的构造函数private,因为没有人能够使用它。

于 2013-04-01T23:37:29.853 回答