gpt4 book ai didi

java - 抽象类构造函数的初始化

转载 作者:行者123 更新时间:2023-12-03 23:01:09 24 4
gpt4 key购买 nike

我在看下面的简单抽象示例,

public abstract class Employee {
private String name;
private String address;
private int number;

public Employee(String name, String address, int number) {
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
}

public class Salary extends Employee {
private double salary; //Annual salary

public Salary(String name, String address, int number, double salary) {
super(name, address, number);
setSalary(salary);
}
}

public class AbstractDemo {
public static void main(String[] args) {
Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
}
}


在这里,我有一个抽象的基类和具体的子类。抽象类在构造函数中有3个参数,子类有4个参数,但是当我在main方法中初始化抽象类和具体类时,两个构造函数都传递了4个参数,并且使用 setSalary()方法,我能够为这两个< cc>和 s甚至认为Employee抽象类仅接受3个参数。

这是怎么回事?有人可以帮我吗?

最佳答案

我不确定我是否理解您在说computesalary()(您的示例代码中没有)所说的话,但是我怀疑造成混淆的原因可能是此行:

Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);


在这里,请注意,即使您将引用分配给类型为 Employee的变量,您仍在创建 Salary对象。因此,您仍然调用 Salary派生类的构造函数,该构造函数具有4个参数。这行代码与上一行代码完全相同,并且执行完全相同的代码路径。唯一的区别是对新创建对象的引用存储在具有基类类型的变量中。

正如Thomas指出的那样,这将调用基类3参数构造函数:

Employee e = new Employee("John Adams", "Boston, MA", 2);


但这不是有效的代码,因为 Employee是抽象的。

关于java - 抽象类构造函数的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20544435/

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