2012-10-31 56 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