Java构造函数继承问题:Monkey构造函数未定义报错求助
构造函数未定义错误的排查与解决
错误原因
- 参数数量与类型不匹配:Monkey类定义的构造函数仅包含12个参数,但主类调用时传入了13个参数。具体差异:构造函数第11个参数是
boolean reserved,但调用时第11个参数是字符串"intake",第12个才是false(对应reserved),多出来的"intake"是构造函数未声明的参数。 - 构造函数内部存在未定义变量:构造函数里调用了
setTrainingStatus(trainingStatus),但trainingStatus既不是构造函数的参数,也没有在方法内定义,这会导致构造函数本身编译失败,间接引发调用时的构造函数未定义错误。 - 参数拼写错误:构造函数的参数
aquisitionCountry拼写有误(正确应为acquisitionCountry),虽不直接触发当前错误,但会导致后续字段赋值异常。
解决办法
方案一:修改构造函数,匹配调用参数
如果"intake"是猴子的训练状态(trainingStatus),需要在构造函数中添加该参数,并修正拼写错误:
public Monkey(String name, String gender, String age, String weight, String tailLength, String height, String bodyLength, String species, String acquisitionDate, String acquisitionCountry, String trainingStatus, boolean reserved, String inServiceCountry) { setName(name); setGender(gender); setAge(age); setWeight(weight); setTailLength(tailLength); setHeight(height); setBodyLength(bodyLength); setSpecies(species); setAcquisitionDate(acquisitionDate); setAcquisitionLocation(acquisitionCountry); setTrainingStatus(trainingStatus); // 现在trainingStatus是构造函数参数,可正常调用 setReserved(reserved); setInServiceCountry(inServiceCountry); }
方案二:调整调用代码,匹配现有构造函数
如果不需要传递"intake"参数,或者该参数属于其他逻辑,修改主类调用代码,去掉多余的"intake",同时修正构造函数内部的未定义变量问题:
- 主类调用代码修改:
public static void initializeMonkeyList() { Monkey monkey1 = new Monkey("Steve", "male", "24", "15.4", "12", "20", "16", "capuchin", "04-26-1999", "United States", false, "United States"); monkeyList.add(monkey1); }
- 构造函数内部修改:给
trainingStatus设置默认值,或者添加对应的参数,示例:
public Monkey(String name, String gender, String age, String weight, String tailLength, String height, String bodyLength, String species, String acquisitionDate, String acquisitionCountry, boolean reserved, String inServiceCountry) { setName(name); setGender(gender); setAge(age); setWeight(weight); setTailLength(tailLength); setHeight(height); setBodyLength(bodyLength); setSpecies(species); setAcquisitionDate(acquisitionDate); setAcquisitionLocation(acquisitionCountry); setTrainingStatus("intake"); // 设置默认训练状态 setReserved(reserved); setInServiceCountry(inServiceCountry); }
内容的提问来源于stack exchange,提问作者Vertuzi
相关产品推荐
相关产品推荐

