[英]Java Inheritance and Constructor Arguments
我是Java的业余爱好者,请帮助我。
我上了一堂课: 帐户
public class Account {
protected String fullName;
protected String accontNumber;
protected String password;
protected int balance;
public Account(String name, String acc_num, String pass, int b){
fullName = name;
accontNumber = acc_num;
password = pass;
balance = b;
}
}
我将创建一个新类Account2 ,该类继承自Account
public class Account2 extends Account{
public Account2(String l){
String[] temp = l.split(",");
super.fullName = temp[0];
super.accontNumber = temp[1];
super.password = temp[2];
super.balance = Integer.parseInt(temp[3]);
}
}
但是我收到一条错误消息,说: 实际参数和形式参数列表的长度不同
我怎么解决这个问题?
像这样
public class Account2 extends Account{
public Account2(String l){
super(l.split(",")[0],l.split(",")[1],l.split(",")[2],Integer.parseInt(l.split(",")[3]))
}
}
当基类具有非默认构造函数(一个或多个参数)时,派生类必须在其构造函数中使用super(paramters)
调用基类构造函数。 还要注意构造函数,您必须在第一行中包含super语句,因此您必须声明具有相同参数的构造,或者在一行中正确传递参数,尽管不建议这样做:
public Account2(String l) {
super(l.split(",")[0],l.split(",")[1],l.split(",")[2],Integer.parseInt(l.split(",")[3]));
}
您尚未放置super
构造函数调用。 因此,默认情况下它将尝试选择super()
即Account
类中不存在的无参数构造函数
当前的子类构造函数在超类构造之后设置超类参数的值。 如果您希望保留该方法,请向设置默认值的超类中添加一个无参数的构造函数。
最好使用setter而不是直接访问这些字段。
恕我直言,在这种情况下,您不应该使用构造函数。 创建一个静态方法,该方法接受您的String
输入,对其进行验证,将其拆分为一些逻辑部分,然后使用“常规”构造函数创建一个对象:
class Account2 extends Account {
Account2(String name, String acc_num, String pass, int b) {
super(name, acc_num, pass, b);
}
public static Account2 createFromString(String input) {
String[] temp = l.split(",");
if (temp.length != 4) {
throw new RuntimeException("...");
}
return new Account2(temp[0], temp[1], temp[2], Integer.parseInt(temp[3]));
}
}
在我个人看来,您的代码将更加整洁:
Account2 acc1 = new Account2("abc", "def", "ghi", 2);
Account2 acc2 = Account2.createFromString("abc,def,ghi,2");
探针:
实际参数和正式参数列表的长度不同
要理解这一点,对构造函数及其在继承下的行为的基本了解将对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.