Type Cannot instantiate the type Employee Company.java

I have two classes for employee and company.I need to list the Department name + Employee name + Age in ascending order by the age. I got this Type Cannot instantiate the type Employee Company.java (I put * * on the errors). Here are my Employee and Company Classes. I don't know what' the problem in linking the Employee Class and Company Class.

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();
            }


}

Upvotes: 1

Views: 2572

Answers (1)

Alexis C.
Alexis C.

Reputation: 93872

Employee is an abstract class, it cannot be instantiated.

An abstract class is a class that is declared abstract—it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed.

If you want to create employees, you have to define a subclass that extends Employee :

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

Then

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

Upvotes: 3

Related Questions