我编写了以下代码和驱动程序,但我不确定如何使用两个构造函数创建银行帐户对象。一个构造函数采用初始余额,第二个构造函数打开一个没有钱的帐户。此外,accountBalance是否应包含有效性检查?
或者,我可以执行以下操作:
包含费用,作为描述银行帐户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过方法添加费用。将代码添加到驱动程序以演示费用功能。 (有人可以向我解释这是在问什么)
td = datetime.datetime.today() - datetime.datetime.today()
days = td.days + (1 if td.seconds or td.microseconds else 0)
答案 0 :(得分:4)
所有好的答案,但他们实际上"想念" "真实"问题;那就是:你没有放下构造函数,因为可以。
您可以创建满足要求所需的代码。换句话说:你退后一步;并且你想出分别设计"预期的用例"为您的银行帐户类。
需要考虑的事项:您避免可以使用此类不同路径创建的类。
示例:允许空 ID /所有者字段非常危险。这会使那些字段的值为null
;这意味着你要么在这里和那里需要大量的检查;如果你忘记了这里或那里;你迟早会遇到NullPointerExceptions(很快就会)。
请记住:您的对象旨在代表(型号!)"现实"。实际上,银行账户在没有所有者的情况下并不存在;或者是身份证。
从这个意义上讲,你的课程的理智实现更像是:
public class BankAccount {
private final String owner;
private final String id;
private double currentBalance;
public BankAccount(String owner, String id) {
this(ownwer, id, 0);
}
public BankAccount(String owner, String id, double currentBalance) {
this.owner = owner;
...
请注意:
double
代表货币。这是一个超级基本的事情: money 不应该使用浮点数表示! (你会期待BigDecimal类;或者只是使用 int 而不是double(并代表1.75 $为175美分)最后一点:对于你目前的练习,那种"验证"提款/存款是"好的&#34 ;;在现实世界中#34;验证可能会在许多其他地方发生。 (回到我最初的陈述:这完全取决于你的模型;一个简单的模型可以说银行账户本身就是"验证"事情;但更现实的解决方案是你有其他组件处理"规则","法律"以及进行"验证")的各种主题。
答案 1 :(得分:1)
根据要使用的构造函数创建对象。例如,要使用第一个构造函数,您需要三个参数,如
BankAccount first = new BankAccount("Bob", "ID45", 400.50);
并且要使用第二个构造函数,您只需要一个参数,余额就像这样,
BankAccount second = new BankAccount(400.50);
他们都会创建BankAccount
的实例,但区别在于创建时,第一个银行帐户将填写字段ownerName
和accountId
,而第二个银行帐户将有这些字段设置为空字符串值。但是,与第一个对象的余额400.5
编辑:与用户ScaryWombat建议的一样,第二个构造函数中存在一个缺陷,因为如果要定义一个余额为0的对象,那么添加balance
就没有意义了参数。此外,在这种情况下,建议您也为其他字段提供默认值,
public BankAccount() {
ownerName = "unknown";
accountId = "unknown";
accountBalance = 0;
}
现在,当您使用此构造函数创建BankAccount
的实例时,它将具有默认值“未知”,“未知”和0。
BankAccount third = new BankAccount();
此外,对于fee
部分,您所要做的就是不仅在BankAccount
类fee
中创建另一个字段,而且还创建一个setter方法以允许用户设定费用,
private double fee;
.
.
.
public void setFee (double fee) {
this.fee = fee;
}
在main方法中,用户可以使用以下内容访问它,
BankAccount account = new BankAccount("Fred", "ID145", 400);
account.setFee(15); //this will set the fee to 15
答案 2 :(得分:1)
你可以这样做:
public BankAccount(String ownerName, String accountId, double accountBalance) {
this.ownerName = ownerName;
this.accountId = accountId;
this.accountBalance = accountBalance;
}
public BankAccount() {
this("some default name", "some default id", 0.0);
}
答案 3 :(得分:1)
如果您想创建零余额的BankAccount,那么
public BankAccount(String ownerName, String accountId, double accountBalance) {
this.ownerName = ownerName;
this.accountId = accountId;
this.accountBalance = accountBalance;
}
public BankAccount() {
this.accountBalance = 0;
}
您可以将它们实例化为
BankAccount mine = new BankAccount("Scary", "123", 1000000.00);
BankAccount empty = new BankAccount();
修改强>
如果您选择使用第二种方法构建方法,id
和owner
也会null
,可能不是很有用
答案 4 :(得分:1)
您无法使用两个构造函数创建一个银行帐户对象。您只需调用两个构造函数中的一个来创建新对象。所以你要么:
BankAccount account = new BankAccount("Sweeper", "ABCDEF", 10000);
或:
BankAccount account = new BankAccount(100000);
请注意,您的第二个构造函数的参数是没有意义的,因为无论参数是什么,您都将余额初始化为0:
public BankAccount(double accountBalance) {
accountBalance = 0;
}
我认为这更有意义:
public BankAccount() {
this.accountBalance = 0;
}
至于你的第二个问题,我会给你一些提示。
您需要在类中添加一个名为fee
的新字段。为它添加getter和setter。