我对使用接口类中的方法感到很困惑。基本上我想要做的是使用接口类中的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) {
}
}
答案 0 :(得分:0)
接口不能有状态。基本上,接口的要点是没有实现。
引用JLS:
接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。
因此,您的name
和employeeID
字段是静态且最终的。这就是为什么你可以归还它们而不是重新分配它们的原因。 (如果你可以重新分配它们,那将是错误的,因为它们是静态的。)
你必须在某个时候定期上课以获得状态。例如:
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
并进行扩展。你不能在界面