我正在尝试在抽象类中编写静态方法,并且根据我的理解,在抽象类下创建静态方法是合法的。但是,我试图创建的工厂类不断给出错误:内部类中的非法静态声明。
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;
}
}
}
答案 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