Java Name类构造器编译错误:参数类型不匹配问题求助
问题分析与解决
核心错误:构造器定义不符合Java规范
Java构造器不能有任何返回值类型(包括void),你给前两个构造器添加了void,导致它们变成了普通方法,而非构造器。当你执行new Name(firstName, lastName)时,编译器找不到匹配的构造器,因此抛出错误。
修正后的Name类构造器
去掉两个构造器的void返回类型:
class Name { private String firstName, lastName; // 默认构造器(无返回类型) public Name() { // Do nothing } // 带参数的构造器(无返回类型) public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } // 拷贝构造器(定义正确,无需修改) public Name(Name n) { this.firstName = n.firstName; this.lastName = n.lastName; } // 其余方法保持不变 public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public void setName(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String toString() { return "Name: " + firstName + ", " + lastName + "\n"; } }
其他需要修正的问题
- main方法的位置:Java的
main方法必须放在类内部,不能单独存在。你需要将其放入一个类(比如NameDemo)中,或者整合到Name类里(推荐单独拆分)。 - 重复创建对象:代码末尾重复写了
Name n1 = new Name (firstName, lastName);,会导致编译错误,直接删除该行。 - 未定义的变量:
main方法里的d1, h1, weight, year未定义,需要补充对应的类型和赋值,或者根据实际业务逻辑调整。 - 导入必要类:使用
Scanner和File需要导入包,在代码开头添加:
import java.util.Scanner; import java.io.File; import java.io.IOException;
修正后的完整示例代码
import java.util.Scanner; import java.io.File; import java.io.IOException; class Name { private String firstName, lastName; public Name() { // Do nothing } public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Name(Name n) { this.firstName = n.firstName; this.lastName = n.lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public void setName(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String toString() { return "Name: " + firstName + ", " + lastName; } } // 补充Profile类的示例定义(根据实际需求调整) class Profile { private Name name; // 示例属性,根据实际情况修改类型 private Object birthDate; private double height; private double weight; private int graduationYear; public Profile(Name name, Object birthDate, double height, double weight, int graduationYear) { this.name = name; this.birthDate = birthDate; this.height = height; this.weight = weight; this.graduationYear = graduationYear; } } public class NameDemo { public static void main (String [ ] args) throws IOException { String firstName, lastName; Scanner input = new Scanner (new File ("input.txt")); firstName = input.nextLine(); lastName = input.nextLine(); // 正常创建Name对象并打印到终端 Name n1 = new Name (firstName, lastName); System.out.println(n1); // 补充未定义变量的示例赋值 Object d1 = null; double h1 = 175.0; double weight = 70.5; int year = 2024; Profile p1 = new Profile (n1, d1, h1, weight, year); } }
内容的提问来源于stack exchange,提问作者JohnnyBJorden
相关产品推荐
相关产品推荐

