Я пытаюсь создать класс Person с конструктором, который инициирует переменные экземпляра с заданными параметрами, но когда новый объект-объект создается через основной класс, код не может быть выполнен, так как конструкторы Person не требуют аргументов, но Я указал четыре в конструкторе. Я использую NetBeans 7.2.1.. вот мой код:
public class Person {
private String fName;
private String mName;
private String lName;
private String dob;
public void Person(String first, String middle, String last, String dateOfBirth){
fName = first;
mName = middle;
lName = last;
dob = dateOfBirth;
}
public String getFirstName(){
return fName;
}
public String getMiddleName(){
return mName;
}
public String getLastName(){
return lName;
}
public String getDOB(){
return dob;
}
public void getFullName(){
System.out.println(fName + " " + mName + " " + lName);
}
public void setFirstName(String name){
fName = name;
}
public void setMiddleName(String name){
mName = name;
}
public void setLastName(String name){
lName = name;
}
public void setDOB(String date){
dob = date;
}
public static void main(String[] args) {
Person p1 = new Person("John","Thomas","Smith", "10 Jul 14");
p1.getFullName();
}
}
Это ошибка, которую я получил при запуске программы:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor Person in class Person cannot be applied to given types;
required: no arguments
found: java.lang.String,java.lang.String,java.lang.String,java.lang.String
reason: actual and formal argument lists differ in length
at Person.main(Person.java:54)
Java Result: 1
Это не конструктор; из-за void
, это метод.
public void Person(String first, String middle, String last, String dateOfBirth){
Явного конструктора не было, поэтому компилятор Java создал конструктор по умолчанию, no-arg. Это объясняет часть сообщения об ошибке:
required: no arguments
Удалите void
чтобы превратить ее в конструктор.
public Person(String first, String middle, String last, String dateOfBirth){
Измените свой код так:
public class Person {
private String fName;
private String mName;
private String lName;
private String dob;
public Person(String first, String middle, String last, String dateOfBirth){
fName = first;
mName = middle;
lName = last;
dob = dateOfBirth;
}
public String getFirstName(){
return fName;
}
public String getMiddleName(){
return mName;
}
public String getLastName(){
return lName;
}
public String getDOB(){
return dob;
}
public void getFullName(){
System.out.println(fName + " " + mName + " " + lName);
}
public void setFirstName(String name){
fName = name;
}
public void setMiddleName(String name){
mName = name;
}
public void setLastName(String name){
lName = name;
}
public void setDOB(String date){
dob = date;
}
public static void main(String[] args) {
Person p1 = new Person("John","Thomas","Smith", "10 Jul 14");
p1.getFullName();
}
}
Объяснение:
Конструкторы не имеют типа возврата. "Тип возврата" для конструктора - это новый экземпляр класса, который не обязательно должен определяться.
Когда вы определяете тип возвращаемого значения в конструкторе, вы превращаете его в метод. Если других конструкторов нет, Java будет использовать конструктор с нулевым аргументом по умолчанию. Вот почему вы получаете ошибку.
Удалите пустоту из вашего конструктора.