【问题标题】:Constructor is undefined in Java classJava 类中未定义构造函数
【发布时间】:2022-01-02 11:48:21
【问题描述】:

我想打印出Person 对象的名字和姓氏。

这是我的 PersonTest 类,它运行文件并从 Person 类获取信息:

package pckg;

public class PersonTest extends Person {

    public static void main(String[] args) {

        Person firstperson = new Person("James", "Bond");

        String firstname = firstperson.getFirstname();
        String lastname = firstperson.getLastname();

        System.out.println("Person's first name is " + firstname);
        System.out.println("My name is " + firstperson.getLastname() + ",");
        System.out.println(firstperson);
        System.out.println("Person is " + firstperson);
    }

}

现在它说“构造函数 Person(String, String) 未定义”。

所以我的问题是,我应该在 Person.class 中写什么来完成这项工作? 到目前为止我已经尝试过了:

package pckg;

public class Person {

    public String Firstname, Lastname;


    public String getFirstname() {
        return Firstname;
    }

    public String getLastname() {
        return Lastname;
    }

}

【问题讨论】:

  • 每当您要为任何类创建对象时,程序都会自动调用该类的默认构造函数。如果您想要任何用户定义的构造函数,那么您应该在您的类中为构造函数定义相应的方法,如下面的解决方案中所述。

标签: java class undefined


【解决方案1】:

如错误所示,您尚未定义签名为 Person(String, String) 的构造函数。

这样做,错误就会消失:

public class Person {

    public String Firstname, Lastname;

    public Person(String firstName, String lastName) {
        this.Firstname = firstName;
        this.Lastname = lastName;
    }

    public String getFirstname() {
        return Firstname;
    }

    public String getLastname() {
        return Lastname;
    }

}

【讨论】:

    【解决方案2】:

    你必须自己写一个构造函数。如果你写new Person("James", "Bond"); 编译器不知道你的意思。字符串"James" 是什么? (是FirstnameLastname,还是完全不同的东西?)

    只需将此代码添加到您的课程中:

    public Person(String fname, String lname) {
        Firstname = fname;
        Lastname = lname;
    }
    

    每次调用new Person 时都会调用此函数。您只需获取两个字符串并将它们存储在正确的类变量中。

    【讨论】:

      【解决方案3】:

      正如错误所说,你没有为类 Person 实现构造函数

      您编辑的代码应该是

      public class Person {
      
          public String Firstname, Lastname;
      
          public Person(String Firstname, String Lastname){
              this.Firstname = Firstname;
              this.Lastname  = Lastname;
          } 
          public String getFirstname() {
              return Firstname;
          }
      
          public String getLastname() {
              return Lastname;
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        您正在尝试调用此处不存在的构造函数:

        Person firstperson = new Person("James", "Bond");
        

        Person 类中没有包含两个 String 参数的构造函数:

        Person(String firstName, String secondName) {
            this.firstName = firstName;
            this.secondName = secondName;
        }
        

        要么将该构造函数添加到您的 Person 类,要么使用隐式零参数构造函数并分别设置这些值:

        Person person = new Person();
        person.firstName = "James";
        person.secondName = "Bond";
        

        【讨论】:

          猜你喜欢
          • 2011-04-11
          • 1970-01-01
          • 2015-02-12
          • 2011-04-13
          • 2018-01-04
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          相关资源
          最近更新 更多