2017-09-05 49 views
-1

好吧,我知道标题听起来像是重复的,但我向你保证,我试图找到类似的问题,但没有一个看起来很合适。如果你能找到它,请降低这一点并将其链接起来,我很乐意删除它。在Java中调用和链接儿童和父母课程

目标很简单:我想创建一个“银行账户”程序,它接受用户的输入,例如银行账户号码,余额和类型,根据账户类型确定账户类型并将其输出供用户查看。

我已经创建三个类,如下所示(只有三个为简单起见)

1)父类

public class ParentAccount { 
    private String acctNumber; 
    private double balance; 

    public ParentAccount(String acctNumber, double balance){ 
     this.acctNumber = acctNumber; 
     this.balance = balance; 

    } 

    public ParentAccount(){ 
     this.acctNumber = "0"; 
     this.balance = 0; 

    } 


    public String toString(){ 
     return String.format("A/C no:%s, Balance=%.2f", acctNumber, balance); 
    } 
} 

2)在子类“无类型的任意帐户”

public class CheckingAccount extends ParentAccount { 
    private int limit = 10000; 
    @Override 
    public String toString(){ 
     return "Bank [" + super.toString() + ",limit=" + limit + "]"; 

    } 
} 

3)主执行类

'一个检查类型的帐户'

例如:

I输入银行A/C作为11234,平衡为100,类型检查

输出:银行A/C:0余额:0极限= 10000

从我可以告诉,代码似乎采取DEFAULT构造函数在我的父类而不是用户构造函数,我可以理解为什么。

我不能得到的是如何解决这个问题。有什么建议么?

+0

您创建一个'ParentAccount'与用户给出的变量,那么如果它是一个支票帐户,你把它扔掉(当然,你忽略它),并创建一个新的空白'CheckingAccount'你然后显示。 – Kayaman

回答

1

我几乎想把这叫做打字错误,但是你的代码正在做,正好是你叫它做的。

回想一下,您的ParentAccount构造函数已被重载。它要么不接受参数。如果它有参数,它会根据需要放入值;如果没有,它不会打扰。

这对你的孩子也是如此;它实际上是当它被实例化时调用super(),所以你会得到ParentAccount的无参数构造函数。

你需要做的,使这项工作有几件事情:

  • 添加一个构造函数来CheckingAccount这只是调用父类的构造。

    public CheckingAccount(String acctNumber, double balance) { 
        super(acctNumber, balance); 
    } 
    
  • 正确实例化依赖于类型的CheckingAccount一个实例。

    ParentAccount account; 
    if("Checking".equals(type)) { 
        account = new CheckingAccount(BankAC, BankBalance); 
    } else { 
        account = new ParentAccount(BankAC, BankBalance); 
    } 
    
    System.out.println(account); 
    
+0

完美工作。感谢大家的帮助! – Mack

0

您只有父类的构造函数,如果您希望在创建P1作为新的checkingAccount对象时再次存储信息,则还需要为checkingAccount创建构造函数。

您正在为P1创建一个新实例,但未传递任何值,因此旧值将丢失。

我建议这样的事情

public CheckingAccount(String acctnumber, double balance){ 
    super(acctnumber, balance); 
} 

,创造P1像

ParentAccount P1 = new CheckingAccount(BancAC, BankBalance); 
0

子类的CheckingAccount只有: “默认构造函数”

,代码:

ParentAccount P1 = new CheckingAccount(); 
System.out.println(P1); 

不包含任何数据。