2012-10-31 58 views
-3

的實例,我創建了一個名爲類銀行及其子類,稱爲ATM,我想申報ATM子類的實例。當我聲明如下所示時,它給我一個錯誤。聲明子類

package bank; 
import java.util.Scanner; 
public class Bank {// Bank class 
    protected int PIN,chequing_balance,savings_balance; 
    public void set_PIN(int PIN){ 
    this.PIN= PIN; 
} 
public int get_PIN(){ 
    return this.PIN; 
} 
public void set_chequing_balance(int chequing_balance){ 
    this.chequing_balance=chequing_balance; 
}  
public int get_chequing_balance(){ 
    return chequing_balance; 
} 
public void set_savings_balance(int savings_balance){ 
    this.savings_balance=savings_balance; 
}  
public int get_savings_balance(){ 
    return savings_balance; 
} 




public class ATM extends Bank{// ATM is a subclass of Bank 
    private void ATM(){ 
    PIN=1207605; 
    chequing_balance=0; 
    savings_balance=0; 
} 
    public void deposit_savings(int amount){ 
    this.savings_balance+=amount; 
} 
    public void withdrawl_savings(int amount){ 
    this.savings_balance-=amount; 
} 
     public void transfer_savings_to_chequing(int amount){ 
    this.chequing_balance+=amount; 
    this.savings_balance-=amount; 
} 
     public void deposit_chequing(int amount){ 
    this.chequing_balance+=amount; 
} 
    public void withdrawl_chequing(int amount){ 
    this.chequing_balance-=amount; 
} 
     public void transfer_chequing_to_savings(int amount){ 
    this.savings_balance+=amount; 
    this.chequing_balance-=amount; 
} 

} 
    public static void main(String[] args) { 
     int key,amount; 
     ATM x= new ATM(); // declaration of instance of ATM subclass 
     Scanner input= new Scanner(System.in); 
     do{ 
      System.out.println("Please enter transaction type 1.Deposit, 2. Withdraw 3. Transfer "); 
      key=input.nextInt(); 

     }while(key<1||key>3); 
    do{ 
     System.out.println("Please enter desired amount"); 
     amount=input.nextInt(); 
    }while(amount<0); 
    if (key==1) 
    { 
     System.out.println("Please enter account desired 1. Chequing 2. Savings"); 
     key=input.nextInt(); 
     if (key==1) 
     { 
      x.deposit_chequing(amount); 
     } 
     else if(key==2) 
     { 
      x.deposit_savings(amount); 
     }  
    } 
    else if (key==2) 
    { 
     System.out.println("Please enter account desired 1. Chequing 2. Savings"); 
     key=input.nextInt(); 
     if(key==1) 
     { 
      x.deposit_chequing(amount); 
     } 
     else if(key==2) 
     { 
      x.deposit_savings(amount); 
     } 
    } 
    else if(key==3) 
    { 
    System.out.println("Please enter type of transaction you want 1. Chequing to Savings 2. Savings to Chequing"); 
    key=input.nextInt(); 
    if (key==1) 
    { 
     x.transfer_chequing_to_savings(amount); 
    } 
    else if (key==2) 
    { 
     x.transfer_savings_to_chequing(amount); 
    } 
    } 
} 
} 
+2

和錯誤是...? –

+0

我創造了我的構造函數,並仍然在我的主要方法,當我創建一個新的ATM,錯誤的是「非靜態變量這不能從靜態上下文中引用」 – noname

回答

2
private void ATM(){ 

這是私人,甚至不是一個構造函數,這是一個方法。構造函數不應該有返回類型。

而且,ATM不應該延長銀行。

+1

有父無構造無論是。 – doublesharp

+0

@doublesharp這沒問題,編譯器會爲你設置一個沒有參數的默認公共構造函數。 –

+0

@LuiggiMendoza是的,這正是我所說的......在默認構造函數之外,沒有爲這個層次設置任何東西。 – doublesharp

0

你的構造不應聲明返回類型應該是:

public ATM() { 
    .... 
} 

此外,當你有一個子類,你必須做出它通過IS-A測試。爲了成爲合適的子類,所有子類都應該對此測試說「是」。 ATM IS-A銀行?嗯不完全。你可以拿出一個ATM的超類,但銀行可能不是。銀行可能擁有很多自動取款機。 ATM IS-A AccountAccessPoint或IS-A CashDispenser。但這更多的是一種模擬練習。

+0

我在編程課程中有實驗室,教授希望我們使用該模型。自動櫃員機是銀行類別的一個子類別,在某種意義上說,銀行擁有一個賬戶,自動櫃員機實現銀行賬戶的接口(典型用法)。在這個實驗中,我們做了一些假設,包括將會有一個銀行賬戶 – noname

+0

。很遺憾你的教授教壞習慣,但現在你知道IS-A關係以及如何應用它。所以你更聰明地提出你的問題。你可能會問你的經理爲什麼ATM的子類Bank以及爲什麼不能通過IS-A測試。只是爲了看他/她說什麼。 :-) – chubbsondubs

+0

哈哈它是我第一次用java編程。我之前在C++中做過面向對象,但是java有點不同 – noname