在Java中调用并链接子类和父类
好吧,我知道这个标题听起来像是重复的,但我向你保证,我已经试着找到类似的问题,但似乎没有一个完全合适。如果你能找到它,向下投票并链接它,我很乐意删除 其目的很简单:我想创建一个“银行账户”程序,该程序接收用户的输入,如银行a/C号、余额和类型,根据这些信息识别账户类型,并输出给用户查看 我创建了三个类,如下所示(为了简单起见,只创建了三个) 1) 父类“没有类型的任意帐户”在Java中调用并链接子类和父类,java,Java,好吧,我知道这个标题听起来像是重复的,但我向你保证,我已经试着找到类似的问题,但似乎没有一个完全合适。如果你能找到它,向下投票并链接它,我很乐意删除 其目的很简单:我想创建一个“银行账户”程序,该程序接收用户的输入,如银行a/C号、余额和类型,根据这些信息识别账户类型,并输出给用户查看 我创建了三个类,如下所示(为了简单起见,只创建了三个) 1) 父类“没有类型的任意帐户” public class ParentAccount { private String acctNumber;
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) 主执行类
import java.util.Scanner;
public class Main {
public static void main(String[] args){
String BankAC;
Double BankBalance;
String type;
Scanner scan = new Scanner(System.in);
System.out.println("Enter your Bank Account Number: ");
BankAC = scan.next();
System.out.printf("Now Enter the balance: ");
BankBalance = scan.nextDouble();
System.out.println("Now enter the type of bank account: ");
type = scan.next();
ParentAccount P1 = new ParentAccount(BankAC, BankBalance);
if("Checking".equals(type)){
ParentAccount P1 = new CheckingAccount();
System.out.println(P1);
}
}
}
例如:
我输入银行A/c为11234,余额为100,键入支票
输出:银行账户:0余额:0限额=10000
据我所知,代码似乎采用了父类中的默认构造函数,而不是用户构造函数,这一点我可以理解
我不能得到的是如何避开这件事。有什么建议吗 只有父类的构造函数,如果要在创建P1作为新的checkingAccount对象时再次存储信息,还需要为checkingAccount创建构造函数 您正在为P1创建一个没有传递值的新实例,因此旧值将丢失 我推荐这样的东西
public CheckingAccount(String acctnumber, double balance){
super(acctnumber, balance);
}
并创建类似P1的
ParentAccount P1 = new CheckingAccount(BancAC, BankBalance);
子类CheckingAccount只有:“默认构造函数” 以及守则:
ParentAccount P1 = new CheckingAccount();
System.out.println(P1);
不包含任何数据。我几乎想把这称为输入错误,但您的代码正是按照您的要求执行的 回想一下,您的
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);
ParentAccount
,如果是支票账户,则将其扔掉(好吧,忽略它),并创建一个新的空白CheckingAccount
,然后显示该账户。效果非常好。谢谢大家的帮助!