1

在我的程序中,我有 4 个类,如下所示:

  • class Bank
  • class Branch extends Bank
  • class Customer extends Branch
  • class Loan extends Customer

如果我想添加 a Customer,那么我会提供 main 函数中的所有参数。像:

customer(bank name, bank add, branch number, brunch add, customer info...)

从这个构造函数中,银行的信息Bank通过 bothCustomerBranch构造函数 usingsuper()等传递给类。

问题是当我创建Loan扩展Customer类的 , 类时,我没有使用任何构造函数,我也不想使用它,因为我只想要Customer类中的一个变量。但是我的编译器显示了这个错误,它是说使用构造函数来获取BankBranchCustomer的构造函数的所有参数。

如何在不使用Loan类中的任何构造函数的情况下解决这个问题?

4

3 回答 3

1

避免在类中使用Customer构造函数的最简单方法是扩展。在决定扩展什么类(如果有的话)时,您应该使用“is a”测试。例如, a是 a ,所以有 是有意义的。但是,is a并没有真正的意义,所以你不应该这样做。另一方面, a有一个; 事实上,a可能不止一个或根本没有。这意味着在类中有一个成员变量(或者可能是一个of s,如果您已经了解了 Container API)是有意义的。LoanCustomerBranchBankclass Branch extends BankLoanCustomerclass Loan extends CustomerCustomerLoanCustomerLoanLoanListLoanCustomer

于 2012-10-15T16:40:50.907 回答
0

您将不得不修改您的 OO 思维:

分行扩展了银行,好吧,我可以忍受它,但可能不是一个好主意(也许装饰器模式是更好的选择)

客户扩展了分支,这是不正确的(尝试真实地思考......)一个分支将有一个客户集合,并且可能一个客户有一个字段分支,具体取决于您的需要。

贷款扩展客户,这是不正确的,就像上面一样,客户可以拥有一系列贷款,并且可能贷款拥有一系列客户,具体取决于您的需求。

所以我建议你检查你的对象模型。

请注意,只有在您真的需要时才有 2 路参考是一个好主意,但由于我不知道您的要求,我无法为您决定。

一些要阅读的文章:

装饰图案

组合优于继承

于 2012-10-15T16:40:11.093 回答
0

不要使用继承,对这些类使用引用:

class Bank {
    private List<Loan> loans;
}

class Loan {
    private Customer customer;
}

您可以通过不同的方式对此进行建模:银行有一个客户列表和一个贷款列表,一个贷款有一个客户或一个客户有一个贷款列表,等等。但重要的一点是,一个类应该只在以下情况下扩展另一个类它“是”那种类型:Dog 可以扩展 Animal,但 Dog 不会扩展 Kennel 或 Food。

当你这样做时,你可以创建一个银行,在构造函数中将它的属性传递给它。然后创建一个客户,只将客户属性传递给它的构造函数。要将客户关联到银行,请将此方法添加到银行:

public void addLoan(Loan loan) {
    this.loans.add(loan);
}

那么每个类的构造函数只需要它自己的属性。

于 2012-10-15T16:50:27.083 回答