2014-01-26 6 views
-1

나는 인터페이스 클래스에서 메서드를 사용하는 것에 대해 매우 혼란 스럽다. 기본적으로 인터페이스 클래스에서 set 메소드를 사용하여 다른 클래스에서 사용하려고합니다. this.name = name을 사용할 때 오류가 발생합니다. 누구 한테 도움이 되니?인터페이스 클래스에서 setter를 사용하려면 어떻게해야합니까?

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

어느

String name = ""; 
    int employeeID = 0; 

HourlyEmployee 이동하거나 abstract class에 인터페이스를 변경하고 확장. 인터페이스에 변수가 없습니다.

0

인터페이스에는 상태가있을 수 없습니다. 기본적으로 인터페이스의 요점은 구현이 없다는 것입니다.

JLS 인용하면 인터페이스의 본문에

모든 필드 선언하는 것은 암시 적으로, 공공 정적, 그리고 마지막이다. 이러한 필드에 대해 이러한 수정 자의 일부 또는 전부를 중복 지정하는 것이 허용됩니다.

귀하의 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을 확장합니다.

관련 문제