Java子类构造访问父类成员报错:'card方法未定义'问题解决
解决子类构造方法调用父类构造报错:'method card is undefined for the type creditcard'
你在子类creditcard中尝试创建可接收父类card数据成员值的构造方法时,出现了报错:'method card is undefined for the type creditcard'。
原代码如下:
class card{ int cardno; String cust_name; String bank_name; public card(int num,String c_name,String b_name) { cardno=num; cust_name=c_name; bank_name=b_name; } card(){} } class creditcard extends card{ int limit; public creditcard(int num,String c_name,String b_name,int lim) { card(num,c_name,b_name); // 错误所在 limit=lim; } }
错误原因
Java不允许子类构造方法直接通过父类类名调用父类构造方法,你这里的card(num,c_name,b_name)会被编译器识别为调用一个名为card的普通方法,但creditcard类中并未定义该方法,因此触发报错。
修正方案
必须使用super()关键字调用父类的有参构造方法,修改后的代码如下:
class card{ int cardno; String cust_name; String bank_name; public card(int num,String c_name,String b_name) { cardno=num; cust_name=c_name; bank_name=b_name; } card(){} } class creditcard extends card{ int limit; public creditcard(int num,String c_name,String b_name,int lim) { super(num,c_name,b_name); // 使用super调用父类有参构造 limit=lim; } }
补充说明
super()是Java专门用于调用父类构造方法的关键字,必须放在子类构造方法的第一行(子类构造方法互相调用this()的情况除外)- 如果子类构造方法没有显式调用
super(),编译器会自动插入无参的super(),但当你需要初始化父类成员变量时,必须显式调用对应参数的super(参数)来完成父类的初始化。
内容的提问来源于stack exchange,提问作者Shreya Saini
相关产品推荐
相关产品推荐

