java transactions数组_java-从父类对象的数组列表中调用子类的方法

这篇博客讨论了一个Java编程问题,涉及到如何在Transaction对象的数组列表中调用子类Check的getCheckNumber()方法。作者提供了一个模拟自动取款机的场景,其中Transaction是父类,Check是其子类。解决方案建议使用has-a关系而非is-a关系,将Check对象存储在Transaction或Account类中,以便于访问Check的属性。
摘要由CSDN通过智能技术生成

我已经在寻找解决方案,但是我仍然不知道该怎么办.该程序应该模拟一个自动取款机,该自动取款机从支票中减去余额,并向存款中添加钱.

我有这个家长班:

public class Transaction

{

private int transNumber;

private int transId;

private double transAmt;

public Transaction(int number, int id, double amount)

{

transNumber = number;

transId = id;

transAmt = amount;

}

public int getTransNumber()

{

return transNumber;

}

public int getTransId()

{

return transId;

}

public double getTransAmount()

{

return transAmt;

}

}

我有一个数组列表(transList),用于存储每次提款/存款的Transaction对象.

子类是:

public class Check extends Transaction

{

private int checkNumber; // check number for each check transaction

public Check(int tId, double tAmt, int tCount, int checkNumber) {

super(tCount, tId, tAmt);

this.checkNumber = checkNumber;

}

public int getCheckNumber() {

return checkNumber;

}

public void setCheckNumber(int checkNumber) {

this.checkNumber = checkNumber;

}

}

如果用户需要,我需要在JOptionPane中打印出支票号.

我主要有:

checkNumStr = JOptionPane.showInputDialog("Enter check number:");

checkNum = Integer.parseInt(checkNumStr);

checkAmtStr = JOptionPane.showInputDialog("Eneter check amount:");

checkAmt = Double.parseDouble(checkAmtStr);

Check c = new Check(1, checkAmt, acctCheck.gettransCount(), checkNum);

acctCheck.addTrans(c);

我不确定我是否已经足够清楚.我以前没有在这里问过任何问题.我需要知道的是如何从父类Transaction的对象的数组列表中调用Check.getCheckNumber().

编辑:transList位于另一个类:Checking Account:

public class CheckingAccount extends Account

{

private double totalServiceCharge;

private static ArrayList transList;

// keeps a list of Transaction objects for the account

private int transCount = 0;

// the count of Transaction objects and used as the ID for each transaction

NumberFormat fmt = NumberFormat.getCurrencyInstance();

public CheckingAccount()

{

transList = new ArrayList();

totalServiceCharge = 0;

}

public double getServiceCharge()

{

return totalServiceCharge;

}

public void setServiceCharge(double currentServiceCharge)

{

totalServiceCharge += currentServiceCharge;

}

// adds a transaction object to the transList

public void addTrans(Transaction newTrans)

{

transList.add (newTrans);

transCount++;

}

//returns the current value of transCount;

public int gettransCount()

{

return transCount;

}

}

解决方法:

在建立课程时,您应该考虑has-a is-a关系.

您的例子

您有一个交易类.您有一个Check类扩展了Transaction.当您扩展时,您是说“支票是一项交易”,这是不正确的.但是交易是否有一张(或一张)支票?是!因此,在这种情况下,您可以将Check与Transaction的扩展分开,然后执行以下操作:

public class Transaction {

Check check; // This is an example of a has-a relationship

}

public class Check { // notice how Check doesn't extend Transaction

// anymore. As it shouldn't, because they don't

} // share any common properties

如果您想要一个ArrayList of Checks,我会将其放在Account类中,因为Account确实具有-a(ha)a checkHistory

public class Account {

ArrayList checkHistory = new ArrayList();

public ArrayList getCheckHistory() {

return checkHistorty;

}

}

因此,您可以从Account类调用checkHistory,这很有意义

Account myAccount = new Account();

ArrayList list = myAccount.getCheckHistory();

for (Check check : list) {

System.out.print(check.someCheckProperty);

}

标签:java

来源: https://codeday.me/bug/20191122/2061062.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值