Java中Main调用Shape子类display()方法无法解析报错求助
问题解决:Cannot resolve method 'display()'(不修改Main类)
问题根源
Main类里调用的是无参的display(),但你当前的Shape及其子类只提供了带参版本的display方法,编译器找不到对应方法所以报错;另外父类的display方法存在参数遮蔽问题(方法参数result覆盖了成员变量result),子类的area方法也没把计算结果存到成员变量里,导致后续无法正确获取面积值。
修改后的完整代码
Shape类
class Shape { // 初始化result为空字符串,避免拼接时出现null前缀 String result = ""; double area; // 修正display方法逻辑:只接收res参数,更新成员变量result并返回 public String display(String res) { // 把res追加到成员变量result中,符合作业要求 this.result += res; return this.result; } public double area() { return this.area = 0; } static double area(double area) { return area = 0; } }
Triangle类
class Triangle extends Shape { double length; double width; public Triangle(double length, double width) { this.length = length; this.width = width; // 调用area方法计算并赋值成员变量area area(); } @Override public double area() { // 计算面积并存到成员变量area,方便后续display方法使用 this.area = length * width / 2; return this.area; } // 添加无参display方法,完全匹配Main类的调用 public String display() { // 把面积转为字符串,传给父类的display方法 String areaStr = String.valueOf(this.area); return super.display(areaStr); } @Override public String toString() { return this.getClass().getSimpleName(); } }
Circle类
class Circle extends Shape { double radius; public Circle(double radius) { this.radius = radius; // 调用area方法计算并赋值成员变量area area(); } @Override public double area() { // 计算圆的面积并存到成员变量area this.area = Math.PI * Math.pow(radius, 2); return this.area; } // 添加无参display方法,匹配Main类的调用 public String display() { String areaStr = String.valueOf(this.area); return super.display(areaStr); } @Override public String toString() { return this.getClass().getSimpleName(); } }
关键修改说明
- 添加无参display方法:在Triangle和Circle中新增无参的
public String display(),完全适配Main类的调用方式,直接解决方法找不到的报错。 - 修正父类display逻辑:去掉冗余的
result参数,直接操作成员变量this.result,避免参数遮蔽导致的逻辑错误,符合作业要求的"add res parameter to result and return the result"。 - 子类area方法赋值成员变量:修改子类的
area()方法,把计算结果存到成员变量area里,这样display方法可以直接拿到已计算好的面积值。 - 初始化result变量:在Shape类里把
result初始化为空字符串,避免第一次拼接时出现null前缀的问题。
内容的提问来源于stack exchange,提问作者sufferingThruSchool
相关产品推荐
相关产品推荐

