You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:30:18