如何使用接口类中的setter?

时间:2014-01-26 23:23:13

标签: java object interface

我对使用接口类中的方法感到很困惑。基本上我想要做的是使用接口类中的set方法然后在另一个类中使用它。当我使用this.name = name时,我收到一个错误。有人帮忙吗?

public interface Employee {
   String name = "";
   int employeeID = 0;

public void setName(String name);
public void setEmployeeID(int employeeID);
public String getName();
public int getEmployeeID();

}

public class HourlyEmployee implements Employee {
private int payRate;
private int hoursWorked;

public int getPayRate() {
    return payRate;
}

public void setPayRate(int payRate) {
    this.payRate = payRate;
}

public int getHoursWorked() {
    return hoursWorked;
}

public void setHoursWorked(int hoursWorked) {
    this.hoursWorked = hoursWorked;
}

public String getName() {
        return name;
}

public int getEmployeeID() {
    return employeeID;
}

public void setName(String name) {

}

public void setEmployeeID(int employeeNum) {

}
}

2 个答案:

答案 0 :(得分:0)

接口不能有状态。基本上,接口的要点是没有实现。

引用JLS

  

接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。

因此,您的nameemployeeID字段是静态且最终的。这就是为什么你可以归还它们而不是重新分配它们的原因。 (如果你可以重新分配它们,那将是错误的,因为它们是静态的。)

你必须在某个时候定期上课以获得状态。例如:

public interface Employee {
    public String getName();
    public void setName(String name);
    public long getEmployeeID();
    public void setEmployeeID(long employeeID);

    public double getAnnualEarnings();
    public void setAnnualEarnings();
}

public abstract class AbstractEmployee
implements Employee {
    protected String name;
    protected long employeeID;

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public long getEmployeeID() {
        return employeeID;
    }

    @Override
    public void setEmployeeID(long employeeID) {
        this.employeeID = employeeID;
    }
}

子类扩展AbstractEmployee以继承其状态,但为其年度收入的计算提供了独特的实现。

答案 1 :(得分:0)

要么移动

   String name = "";
   int employeeID = 0;

HourlyEmployee或将界面更改为abstract class并进行扩展。你不能在界面

中有变量