(JAVA)来自用户输入值的继承一直为null



我对java很陌生,所以我的代码可能效率很低或完全错误。如果这是一个愚蠢的问题,我真的很抱歉,但我的问题是当我打印mgr.getDetails()时,所有来自Employee的用户输入值都为空。

以下是代码:

员工:

public class Employee {
protected int ID;
protected String firstName;
protected String lastName;
protected String middleName;
protected double salary;
protected String birthDate;
public String getDetails(){
return "ID: " + String.format("%03d", ID) + "nName: " + firstName + ", " + lastName + ", " + middleName + "nBirthdate: " + birthDate + 
"nSalary: " + String.format("%,.2f",salary);
}

public void setDetails(int ID, String firstName, String lastName, String middleName, String birthDate, double salary){
this.ID = ID;
this.firstName = firstName;
this.lastName = lastName;
this.middleName = middleName;
this.birthDate = birthDate;
this.salary = salary;
}
}

经理:

public class Manager extends Employee{
protected String department;


@Override
public String getDetails(){
return super.getDetails() + "nDepartment: " + department;
}   
public void setDetails(String department){
this.department = department;
}
}

主要类别:

import java.util.Scanner;
public class MainClass {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Employee e = new Employee();
Manager mgr = new Manager();

System.out.println("Enter ID: ");
int ID = input.nextInt();
input.nextLine();

System.out.println("Enter First Name: ");
String firstName = input.nextLine();


System.out.println("Enter Middle Name: ");
String middleName = input.nextLine();


System.out.println("Enter last Name: ");
String lastName = input.nextLine();


System.out.println("Enter Salary: ");
double salary = input.nextDouble();
input.nextLine();

System.out.println("Enter Birthdate: ");
String birthDate = input.nextLine();
e.setDetails(ID, firstName, lastName, middleName, birthDate, salary);

System.out.println("Enter Department: ");
String department = input.nextLine();
mgr.setDetails(department);

System.out.println(mgr.getDetails());
input.close();

}
}

您即将开始一个伟大的开发人员职业生涯,即使认为答案很简单,我也会用它来为您提供一些如何解决问题的指导。

尝试始终使用";笔和纸";,这意味着首先要理解问题并手动解决。只有这样,您才能将其注入编程代码中

首先,严格回答您最初发布的问题:mgre对象是两个独立的对象,ManagerEmployee类之间的继承关系不足以达到您预期的效果。

现在提出一些建议,如何找到适合您需求的解决方案。

如果您想继续Java继承,那么您必须正确设置super和subclass。强烈建议使用构造函数方法和适当的setter和getter。

Employee e = new Employee(ID, firstName, lastName, middleName, birthDate, salary);
Manager mgr = new Manager(ID, firstName, lastName, middleName, birthDate, salary, department);  // Now, I am a manager !!!
System.out.println(mgr.getDetails());

为了实现这一点,EmployeeManager类应该看起来像:

public class Employee {
protected int ID;
protected String firstName;
protected String lastName;
protected String middleName;
protected double salary;
protected String birthDate;
public Employee(int ID, String firstName, String lastName, String middleName, String birthDate, double salary) {
setDetails(ID, firstName, lastName, middleName, birthDate, salary);
}
public String getDetails() {
return String.format("ID: %03dnName: %s, %s, %snBirthdate: %snSalary: %,.2f", ID, firstName, lastName, middleName, birthDate, salary);
}

public void setDetails(int ID, String firstName, String lastName, String middleName, String birthDate, double salary) {
this.ID = ID;
this.firstName = firstName;
this.lastName = lastName;
this.middleName = middleName;
this.birthDate = birthDate;
this.salary = salary;
}
}
public class Manager extends Employee {
protected String department;
public Manager(int ID, String firstName, String lastName, String middleName, String birthDate, double salary, String department) {
super(ID, firstName, lastName, middleName, birthDate, salary);
this.department = department;
}

@Override
public String getDetails() {
return super.getDetails() + "nDepartment: " + department;
}
}

即使认为这可能有效,它也表明在这种特殊情况下,继承可能不是最好的模式。

这样怎么样?让我们稍微更改一下Manager类:

public class Manager {
protected Employee employee;
protected String department;
public Manager(Employee employee, String department) {
this.employee = employee;
this.department = department;
}

@Override
public String getDetails(){
return employee.getDetails() + "nDepartment: " + department;
}
}

然后您可以按以下方式使用它。看起来你可以很容易地将员工提升为经理;-(

Employee e = new Employee(ID, firstName, lastName, middleName, birthDate, salary);
Manager mgr = new Manager(e, department);  // Now, I am a manager !!!
System.out.println(mgr.getDetails());

希望能有所帮助。继续学习;-(

最新更新