在我的程序中,我有4个类,如下所示:
class Bank
class Branch extends Bank
class Customer extends Branch
class Loan extends Customer
如果我想添加Customer
,那么我将从main函数中提供所有参数。像:
customer(bank name, bank add, branch number, brunch add, customer info...)
在此构造函数中,银行的信息通过使用Bank
的{{1}}和Customer
构造函数转到Branch
类,依此类推。
问题是当我创建super()
类扩展Loan
类时,我没有使用任何构造函数,我也不想使用它,因为我只想要来自Customer
类的一个变量。但是我的编译器显示了这个错误,它说使用构造函数来获取Customer
,Bank
和Branch
的构造函数的所有参数。
如何在不使用Customer
类中的任何构造函数的情况下解决此问题?
答案 0 :(得分:1)
避免在Customer
类中使用Loan
构造函数的最简单方法是不扩展Customer
。在决定要扩展的类时,如果有的话,你应该使用“是一个”测试。例如,Branch
是Bank
,因此拥有class Branch extends Bank
是有意义的。但是,Loan
是Customer
并不真正有意义,因此您不应该class Loan extends Customer
。另一方面,Customer
有一个Loan
;实际上,Customer
可能有多个Loan
或根本没有Loan
。这意味着在List
类中有一个Loan
成员变量(或者Customer
{{1}} {{1}},如果您已经了解了Container API)是有意义的
答案 1 :(得分:0)
你必须修改你的OO思想:
Branch扩展了Bank,好吧我可以忍受它,但可能不是一个好主意(也许装饰模式是更好的方式)
客户扩展分支,这是不正确的(试着想真实的......)分支机构将拥有一个客户集合,并且可能客户有一个现场分支,具体取决于您的需求。
贷款扩展了客户,这是不正确的,如上面的客户可以拥有一系列贷款,并且贷款可能有一组客户,具体取决于您的需求。
所以我建议你检查你的对象模型。
请注意,如果您确实需要2路引用只是一个好主意,但由于我不知道您的要求,我无法为您决定。
有些文章要阅读:
答案 2 :(得分:0)
不要使用继承,请对这些类使用引用:
class Bank {
private List<Loan> loans;
}
class Loan {
private Customer customer;
}
你可以用不同的方式建模:银行有一个客户列表,一个贷款清单,一个贷款有一个客户或一个客户有一个贷款清单等。但重要的是,一个类应该只当它是“那种”类型时延伸另一个:狗可以延伸动物,但狗不会延伸狗窝或食物。
执行此操作时,您可以创建一个Bank,在构造函数中将其属性传递给它。然后创建一个Customer,仅将Customer属性传递给其构造函数。要将客户与银行关联,请将此方法添加到银行:
public void addLoan(Loan loan) {
this.loans.add(loan);
}
然后每个类的构造函数只需要它自己的属性。