在Java中调用并链接子类和父类

在Java中调用并链接子类和父类,java,Java,好吧,我知道这个标题听起来像是重复的,但我向你保证,我已经试着找到类似的问题,但似乎没有一个完全合适。如果你能找到它,向下投票并链接它,我很乐意删除 其目的很简单:我想创建一个“银行账户”程序,该程序接收用户的输入,如银行a/C号、余额和类型,根据这些信息识别账户类型,并输出给用户查看 我创建了三个类,如下所示(为了简单起见,只创建了三个) 1) 父类“没有类型的任意帐户” public class ParentAccount { private String acctNumber;

好吧,我知道这个标题听起来像是重复的,但我向你保证,我已经试着找到类似的问题,但似乎没有一个完全合适。如果你能找到它,向下投票并链接它,我很乐意删除

其目的很简单:我想创建一个“银行账户”程序,该程序接收用户的输入,如银行a/C号、余额和类型,根据这些信息识别账户类型,并输出给用户查看

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

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) 主执行类

    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
,然后显示该账户。效果非常好。谢谢大家的帮助!