2012-05-30 55 views
0

我試圖編寫一個簡單地接收輸入的工資單程序,進行一些計算並顯示每個員工的輸出。創建從一個類擴展到放入數組列表的對象

我有兩種類型的員工,每小時和工資。我創建了一個類延伸到一個抽象的Employee類每種類型:

public abstract class Employee{ 
    private String name; 
    private String type; 
    private int hours; 
    private double rate; 
} 


public class SalaryEmployee extends Employee{ 

    public SalaryEmployee(String type, String name, int hours, double rate){ 
    this.type = type; 
    this.name = name; 
    this.hours = hours; 
    this.rate = rate; 
    } 

    public void print(){ 

    } 
} 

在我的主要方法,當我嘗試使用下面的代碼來創建我的對象:

Employee employee; 
    if(type.equals("hourly")) 
    { 
    employee = new HourlyEmployee(type, name, hours, rate); 
    } 
    else 
    { 
    employee = new SalaryEmployee(type, name, hours, rate); 
    } 

我得到以下當我嘗試編譯時出錯:

Lab3.java:53: not a statement 
     SalaryEmployee employee = new SalaryEmployee(type, name, hours, rate); 
     ^
Lab3.java:53: ';' expected 
     SalaryEmployee employee = new SalaryEmployee(type, name, hours, rate); 
        ^
2 errors 

任何想法這裏發生了什麼?我四處尋找弄亂分號或大括號,但還沒有發現任何東西。

感謝您的期待。

+1

除非在左側具有「Employee」類型,否則不會從多態性中獲得太多結果。順便說一下,類型字段是多餘的。 – 2012-05-30 23:52:59

+1

errday errday,get dem pnts,errday –

+0

如果您可以上傳案例的完整代碼段,那會更好。因爲'SalaryEmployee employee = new SalaryEmployee(type,name,hours,rate)'行''在給定的代碼段中找不到 –

回答

2

在if不使用大括號的情況下聲明變量是非法的。它看起來像你想寫的是這樣的:

Employee employee; 
if(type.equals("hourly")) 
    employee = new HourlyEmployee(type, name, hours, rate); 
else 
    employee = new SalaryEmployee(type, name, hours, rate); 

大多數編碼約定支持總是使用花括號後if或else。

+0

將其更改爲上面的代碼後,我收到錯誤消息:'不能從靜態上下文中引用的非靜態變量'引用'employee = new Hourly ...'行。另外,如果if/else之後只有一條語句,那麼不能省略大括號? – Huy

2

我能看到的唯一錯誤是你的SalaryEmployee類不能訪問基類變量,因爲它們是private。你應該讓他們protected

雖然,你所得到的錯誤將會不同。如果你在改變之後仍然得到錯誤,你的錯誤可能在別處。