【问题标题】:Class constructor call with class as input [duplicate]以类作为输入的类构造函数调用[重复]
【发布时间】:2020-12-29 08:21:03
【问题描述】:

我正在处理一个类,并以它作为输入来调用这个类。

 professor = new Professor(EEEE, AAAA, YEARS_90, DEP);

 depProf.addProfessor(professor)

Professor 有一个 (String, String, Integer, String) 的构造函数,但在测试中我想从另一个地方调用它,并以 (Professor) 作为输入。

public Professor(String name, String surname, Integer yearOfBirth, String department) {

    this.department = department;
    Person curPerson = new Person(name, surname, yearOfBirth);

}

如何创建Professor(Professor)的构造函数?如果这有任何意义。

我正在考虑在调用第二个构造函数时调用第一个构造函数,但实际上不知道如何使其工作。

【问题讨论】:

  • 你只是写了构造函数,具体是什么让你感到困惑? public Professor(Professor other) { ... } 然后复制他的状态或者调用其他构造函数this(other.getName(), other.getSurname(), other.getYearOfBirth(), other.getDepartment());
  • 你试过在网上搜索java copy constructor这个词吗?
  • 另请参阅“如何在 Java 中从另一个构造函数调用一个构造函数?”的答案。 stackoverflow.com/questions/285177/…
  • 我的问题是教授只有部门。姓名、姓氏和年份是另一个类的输入,我不能使用 this.name 因为它会像 Person.name 并且我不想调用教授制作的对象

标签: java


【解决方案1】:

如果我做对了,您就是在尝试使用复制构造函数。这个构造函数默认在 C++ 中生成,但是你必须在 Java 中手动实现一个,在你的 Professor 类中:

public Professor(Professor p) { 
    this(p.name, p.surname, p.yearOfBirth, p.department);
} 

【讨论】:

  • 请注意,C++ 不会生成 such 构造函数。它是不同的。更类似于 Javas clone 机制 - 黑巫术。
【解决方案2】:

您可以在同一个类中调用另一个构造函数,例如:

public Professor(String name, String surname, Integer yearOfBirth) {
   this.name = name;
   this.surname = surname;
   this.yearOfBirth = yearOfBirth;
}

public Professor(String name, String surname, Integer yearOfBirth, String department) {
  this(name, surname, yearOfBirth);
  this.department = department;
}

public Professor(Professor p) {
  this(p.name, p.surname, p.yearOfBirth, p.department);
}

【讨论】:

  • 如果我的教授课实际上没有名字、姓氏和出生年份怎么办?教授构造函数调用 Person(String, String, Integer) 教授只有部门。
  • 没关系,没想到超类的事情。
【解决方案3】:

您可以使用this 调用另一个构造函数。

public Professor(Professor professor) {
    this(professor.name, professor.surname, professor.yearOfBirth, professor.department);
}

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2020-09-22
    相关资源
    最近更新 更多