我对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();
}
}
您即将开始一个伟大的开发人员职业生涯,即使认为答案很简单,我也会用它来为您提供一些如何解决问题的指导。
尝试始终使用";笔和纸";,这意味着首先要理解问题并手动解决。只有这样,您才能将其注入编程代码中
首先,严格回答您最初发布的问题:mgr
和e
对象是两个独立的对象,Manager
和Employee
类之间的继承关系不足以达到您预期的效果。
现在提出一些建议,如何找到适合您需求的解决方案。
如果您想继续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());
为了实现这一点,Employee
和Manager
类应该看起来像:
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());
希望能有所帮助。继续学习;-(