我知道您在从另一个类继承时会使用它,并且必须首先在构造函数内部调用它,而且如果我不手动调用它,则会自动调用一个空的super()方法。
例如,我们有一个名为bank的Parent类:
public class bank implements Comparable<bank> {
private String owner;
public String money;
public boolean intheCubby;
public bank(String name, String ownersName) {
owner = ownersName;
money = name;
}
还有一个名为Account的子类:
public class Account extends bank {
private int totalquantity;
public int neededquantity;
public Account(String name, int n) {
super(name, name);
money = name;
totalquantity = n;
}
public Account(String name, int n, String ownersName) {
super(name,ownersName);
money = name;
totalquantity = n;
setOwner(ownersName);
}
因此,我知道它的工作原理是这样的:您在Parentclass中具有bank构造函数,并带有2个String参数。 您的super();因此,该方法还应包含2个String类型的参数。 但是,如果子类的构造函数仅具有(String,int)个参数,我应该将(String,null)放入我的super()怎么办?方法?因为我必须插入其他内容,所以出现错误。
答案 0 :(得分:2)
您必须从子类构造函数中调用超类的构造函数之一。
如果超类只有一个接受两个String
的构造函数,则必须从子类构造函数调用该构造函数。您的子类的构造函数应决定将哪些String
实例传递给超类构造函数。
在您的示例中,
public Account(String name, int n, String ownersName) {
super(name, ownersName);
...
}
将起作用。
public Account(String name, int n) {
super(name, "someDefaultValue"); // or super(name, null);
...
}
也可以。
答案 1 :(得分:1)
Bank类只有一个带有name
和ownersName
参数的构造函数。因此,当从super()
类调用Account
时,必须决定如何初始化这两个参数。如果您在ownersName
中没有Account
,则可以确实将null作为第二个参数传递。这可能会导致问题,但稍后如果Bank类真的依赖于设置的ownersName
。
我还发现Account
扩展了Bank
很奇怪,因为一个帐户实际上不是银行。但在这里我可能会丢失您设计的完整上下文。如果希望银行是Account
的字段,或者Bank
有一个ArrayList<Account>
的字段。
答案 2 :(得分:0)
在这种情况下,将构造函数与this()链接;本来是 最佳。