2013-11-21 22 views
-5

我有2個類。 1類看起來像這樣並具有「工作」方法。不能從類2中的類1調用方法

public class Worker extends Employee 
{ 
    int hourPay; 
    int amountHours = 0; 

    public Worker(String name, int hourPay) 
    { 
     super(name); 
     this.hourPay = hourPay; 
    } 

public void work(int hours) 
    { 
     amountHours = amountHours + hours; 
    } 

    ... 
} 

我想調用這個類在這樣的另一個類的構造函數:

public Employees() 
    { 
     john = new Clerk("Jan", 1750); 
     pete = new Worker("Piet", 9); // Clerk and Worker are classes inherited from Employees 
     pete.work(5); 

     members[0] = john; 
     members[1] = pete; 
    } 

爲什麼不這項工作?我總是收到錯誤「無法找到符號 - 方法工作(int)」

+1

你能提供你的班級工人的聲明嗎? – benzonico

+4

你得到'DoesNotWorkException'嗎? –

+0

顯示更多代碼,顯示** complete **錯誤消息。 –

回答

1

我的猜測是,可變pete被聲明爲Employee類,這意味着只有類的方法,可以對變量進行調用。您必須聲明peteWorker類型,或使用強制:

((Worker)pete).work(5); 
+0

這正是錯誤,非常感謝! –

+0

@TrickBoss你應該接受他的回答。 – Dodd10x

+0

@HovercraftFullOfEels:他說的是皮特是這樣宣佈的。員工皮特;而不是工人皮特;因此需要將它投射給工人。 –

0

它看起來像你的Worker類不編譯。在你的Worker類中,你有一個案例問題。你的構造是一個小地方w它應該是一個資本W

+0

對不起,我將它從原始語言(荷蘭語)翻譯過來,並在此處輸入錯誤,但在我的程序中正確輸入 –

0

這不是一個構造函數:

public worker(String name, int hourPay) 
{ 
    super(name); 
    this.hourPay = hourPay; 
} 

它應該是:

public Worker(String name, int hourPay) // note the capital W 
{ 
    super(name); 
    this.hourPay = hourPay; 
} 

此外,消息「無法找到符號「通常是由缺少導入引起的(至少在您的代碼中看起來像是這種情況)。檢查你的進口。

+0

@Whomever downvoted:謹慎解釋? –

+0

他有'找不到符號 - 方法工作(int)'的錯誤;不與'工人(姓名,小時)',順便說一句,我不是downvoter – Sage

+0

我想你沒有看完我的整個答案。 (提示:最後2行)。 –

-2

您正在調用基類構造函數中的子類構造函數。子類對象不會被創建,除非基類構造函數已經完成,否則,因此,當基類構造函數完成時,get的子類對象不會被創建,因此工作方法不存在,從而出錯。

+0

這還沒有確認,「Employee」和「Employees」不一樣 – Sage

0

您尚未正確初始化任何內容。什麼類型是members[]?假設pete是Workers的一個對象,您需要將其初始化爲Workers pete = new Worker("Piet", 9)等等。