2013-10-24 41 views
1

我有兩個類的員工和公司。我需要按年齡升序列出部門名稱+員工姓名+年齡。我得到這種類型不能實例化類型員工Company.java(我把* *的錯誤)。這是我的員工和公司類。 我不知道連接員工類和公司類時出現了什麼問題。類型無法實例化類型員工t Company.java

public abstract class Employee implements Comparable<Employee>{ 
    private String name; 
    private int age; 
    PrimeAgeChecker checks; 
    Department department; 

    Employee(Department department,String name, int age) 
    { 
     this.department = department; 
     this.name = name; 
     this.age = age; 
     this.checks = new PrimeAgeChecker(this); 
    } 


    public int compareTo(Employee x){ 
     if (this.age < x.age) 
      return -1; 
     else if (this.age > x.age) 
      return 1; 
     else 
      return 0; 
    } 

    public int getAge() 
    { 
     return age; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public String toString(){ 
     StringBuffer sb = new StringBuffer(); 
     sb.append(getDept(department)); 
     sb.append("\t"); 
     sb.append(getName()); 
     sb.append("\t"); 
     sb.append(getAge()); 
     sb.append("\t"); 
     sb.append(checks.check()); 

     return sb.toString(); 
    } 

    private Department getDept(Department department){ 
     return department; 
    } 

} 





import java.util.ArrayList; 
import java.util.*; 

public class Company { 

    Department department; 

    private ArrayList<Employee> directory = new ArrayList<Employee>(); 


      public void addEmployee(Employee emplo) { 
       directory.add(emplo); 
      } 

      public void sortBySalary() { 
       // Bubble sort 
       for (int i = 0; i < directory.size(); i++) { 
        for (int j = directory.size() - 1; j > i; j--) { 
         if (directory.get(j - 1).compareTo(directory.get(j)) > 0) { 
          Employee temp = directory.get(j); 
          directory.set(j, directory.get(j - 1)); 
          directory.set(j - 1, temp); 
         } 
        } 
       } 
      } 

      public void listEmployees() { 
       for (Employee emplo : directory) 
        System.out.println(emplo.toString()); 
       System.out.println(); 
      } 

      public static void main(String[] args) {  
       Company direct = new Company(); 

       direct.addEmployee(new ***Employee***(Department.Accounting,"Counting Guru",55)); 
       direct.addEmployee(new ***Employee***(Department.Accounting,"Counting Pro", 45)); 
       direct.addEmployee(new ***Employee***(Department.Accounting,"Counting Savvy", 40)); 
       direct.addEmployee(new ***Employee***(Department.Accounting,"Counting Novice", 25)); 
       direct.addEmployee(new ***Employee***(Department.Marketing,"Sales Guru", 50)); 
       direct.addEmployee(new ***Employee***(Department.Marketing,"Sales Pro", 48)); 
       direct.addEmployee(new ***Employee***(Department.Marketing,"Sales Savvy", 38)); 
       direct.addEmployee(new ***Employee***(Department.Human_Resources,"Hiring Guru", 58)); 
       direct.addEmployee(new ***Employee***(Department.Human_Resources,"Hiring Pro", 47)); 
       direct.addEmployee(new ***Employee***(Department.Information_Systems,"Hacking Pro", 46)); 
       direct.addEmployee(new ***Employee***(Department.Information_Systems,"Hacking Guru", 51)); 
       direct.addEmployee(new ***Employee***(Department.Information_Systems,"Hacking Savvy", 38)); 
       direct.addEmployee(new ***Employee***(Department.Information_Systems,"Hacking Novice", 23)); 

       direct.listEmployees(); 
       direct.sortBySalary(); 
       System.out.println("Department\t\tName\tAge\tPrime"); 
       System.out.println("__________________________________________________"); 
       direct.listEmployees(); 
      } 


} 

回答

3

Employeeabstract class,它不能被實例化。

抽象類是一個聲明爲抽象的類 - 它可能或可能不包含抽象方法。抽象類不能實例化,但它們可以被分類。

如果你想創建的員工,你必須定義,擴展員工的子類:

class ConcreteEmployee extends Employee{  
    ConcreteEmployee(Department d, String name, int age) { 
     super(d, name, age); 
    } 
} 

然後

direct.addEmployee(new ConcreteEmployee(Department.Accounting,"Counting Guru",55)); 
+0

或僱員聲明中刪除「抽象」。 –

+0

好的,謝謝。它的作品 – Bejibun