gpt4 book ai didi

java - 无参数构造函数的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 12:25:55 24 4
gpt4 key购买 nike

我理解下面的大部分代码。
我只是不明白 Employee 和 Person 的无参数构造函数的目的,因为删除它们时我得到了相同的结果。我是 Java 新手,所以如果这是一个愚蠢的问题,我深表歉意。这是我的一个类(class)的代码片段。
任何帮助将不胜感激。

public class TestEmployee {
public static void main(String[] args) {
// Define some employees
Employee president = new Employee("Lucy", "President", 100000);
System.out.println(president);


Employee cto = new Employee("Vincent", "Chief Tech Officer", 70000);
System.out.println(cto);
}
}

class Employee extends Person{
// ADD YOUR CODE HERE!!!
// Nothing above needs to change.
private String jobTitle="Unknown";
private int salary = 0;

public Employee() {

}

public Employee(String name, String jobTitle, int salary) {
super(name);
this.jobTitle = jobTitle;
this.salary = salary;
}

@Override
public String toString() {
return this.getName() + " is the " + jobTitle + " and makes $" + salary + " a year.\n";
}
// You need data fields, a constructor or two, and a to-string method
}

// IF YOU ALREADY HAVE THE PERSON CLASS IN YOUR WORKSPACE
// YOU CAN DELETE THIS. OTHERWISE YOU'LL GET AN ERROR:
// 'The type Person is already defined.'
class Person {
private String name = "Default Name";

// No-arg Constructor
public Person () {
}

public Person (String name){
this.name = name;
}

// Getter method
public String getName() {
return name;
}

// Setter method
public void setName(String newName) {
if (!newName.equals("")) {
name = newName;
}
else
System.out.println("Can't change name. Empty names aren't allowed!");
}

public String toString() {
return "Name: " + name + "\n";
}
}

最佳答案

(a) 您所指的无参数构造函数是“默认构造函数”的显式定义替代品。如果程序员未显式定义构造函数,则编译器(javac) 会自动将默认构造函数定义为 ClassName(){} .这个构造函数在代码中是不可见的,但是在编译完成后,它存在于java字节码中。
(b) 在你的情况下,有一个明确定义的无参数构造函数。原因是你已经明确定义了一个参数化构造函数public Employee(String name, String jobTitle, int salary) public Person (String name)如果在程序中显式定义了参数化构造函数,则 Java 编译器不会插入隐式默认构造函数。因此,如果您希望在不传递任何初始值的情况下创建类的对象 Employee president = new Employee();这个语句会抛出一个错误 No default constructor found; nested exception is java.lang.NoSuchMethodException: .因此,有明确定义无参数构造函数来支持此类对象创建,其中用户可以首先为对象分配堆空间,然后使用 setter 方法或其他一些机制对其进行初始化。

关于java - 无参数构造函数的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48553000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com