抽象类中的静态方法声明

时间:2015-06-20 16:17:49

标签: java static-methods abstract

我正在尝试在抽象类中编写静态方法,并且根据我的理解,在抽象类下创建静态方法是合法的。但是,我试图创建的工厂类不断给出错误:内部类中的非法静态声明。

public abstract class Employee{
    protected String name;
    protected int hours;

    public String getName(){
        return name;
    }
    public int getHours(){
        return hours;
    }

    public abstract String getType();

    public Employee(String name, int hours){
        this.name=name;
        this.hours=hours;
    }

    public abstract double totalPay();


    public static Employee factory(String name, String type, int hours, double wage, double salary){
        if(type.equals("SALARIED")||type.equals("Salaried")||type.equals("salaried")){
            Employee object=new SalariedEmployee(salary, name, hours);
            return object;
        }
        else if(type.equals("HOURLY")||type.equals("Hourly")||type.equals("hourly")){
            Employee object=new HourlyEmployee(wage);
            return object;
        }
        else{
            return null;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

该类的文件名不是Employee.java,对于公共类,包含该类的文件需要命名为.java。在OP示例中 - Employee.java。

虽然在具有不同名称的文件中定义公共类时出现的错误是 -

class Employee is public, should be declared in a file named Employee.java

答案 1 :(得分:0)

内部类不能有静态成员

  

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。此外,因为内部类与实例相关联,所以它本身不能定义任何静态成员。

供参考:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html