2013-04-09 49 views
0

我是一个涉及Java(又)的Web开发人员,我遇到了一些问题。Java子类的最后一个实例覆盖值

基本上,我有一个超类员工有两个子类扩展它称为管理和程序员。 Employee类包含一个基本上是Employee对象数组的employees数组。

下面是两个类(员工和管理)和最终主要方法的重要摘要。我会在底部解释输出。

public class **Employee** { 

    private static String firstName; 
    protected static int MAXEMPLOYEES = 5; 
    protected Employee[] employees = new Employee[MAXEMPLOYEES]; 
    protected int totEmployees = 0; 

    public Employee(String first) { 
     setFirstName(first); 
    } 

    public void setFirstName(String str){ 
     firstName = str; 
    } 

    public String getFirstName(){ 
     return firstName; 
    } 

    public boolean addEmployee(String fname) { 
     boolean added = false; 
     if (totEmployees < MAXEMPLOYEES) { 
      Employee empl = new Employee(fname); 
      employees[totEmployees] = empl; 
      added = true; 
      totEmployees++; 
     } 
     return added; 
    } 

} 

public class **Management** extends **Employee** { 
    private String title = "Project Manager"; 

    public Management(String fname, String t){ 
     super(fname); 
     title = t; 
    } 

    public boolean addManagement(String fname, String t){ 
     boolean added = false; 

     if (totEmployees < MAXEMPLOYEES) { 
      employees[totEmployees] = new Management(fname, t); 
      added = true; 
      totEmployees++; 
     } 
     return added; 
    } 
} 

------------------------------------- 
package employee; 

public class EmployeeApplication { 

    public static void main(String[] args) { 
     Employee[] empl = new Employee[3]; 
     empl[0] = new Employee("Kyle"); 
     empl[1] = new Management("Sheree", "Director"); 

     System.out.println(empl[0].getFirstName()); 
    } 
} 

现在,我期望系统打印出“Kyle”,但它打印出“Sheree”。有任何想法吗???

回答

7
private static String firstName; 

您制作了firstName静态,这意味着所有实例共享相同的名称。您需要删除静态修改器才能让不同的员工拥有不同的姓名。您还需要将私人访问修饰符更改为受保护,以便字段被子类继承。

+0

非常好。谢谢。我觉得有点愚蠢,但这是完美的!非常感谢(我会在7分钟内接受答案,显然:-)) – 2013-04-09 23:13:45

+0

@ KyleO'Brien不客气。如果您之前没有进行过OOP(或者有时即使拥有不同的语言),也很容易错过一些细节。 – 2013-04-09 23:19:05

+0

在PHP中编码不是这个肛门:P – 2013-04-09 23:21:31

2
private String firstName; 

删除static;

谢尔被谢里覆盖,这就是为什么你得到那个输出