You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:40:21