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

继承Rectangle类实现Square类时grow方法重写问题如何解决

问题分析
  • 冗余属性问题:你在Square子类中重复声明了x、y、s三个属性,父类Rectangle本身已经持有这些坐标和尺寸参数,你子类单独声明的属性不会跟随父类方法的修改自动同步,会出现数据不一致的问题,直接删掉这三个属性即可。
  • 原有grow方法逻辑错误:你直接调用父类grow(one, two)如果两个传入的增量值不等,执行后父类的宽高就会变成不同的值,直接破坏正方形特性,后续调用add方法修正的逻辑冗余且容易出问题。
修正方案

grow方法的核心需求是「至少满足指定的宽高增量、同时保持正方形」,所以只需要取两个传入增量的最大值作为宽高共同的增量,直接调用父类的grow方法传入两个相同的增量值即可,不需要额外调用add方法。

修正后的完整代码
public class Square extends Rectangle{
    
    public Square(int x, int y, int s) {
        super(x,y,s, s);
    }

    @Override
    public void add(int one, int two) {
        super.add(one, two);
        super.add(this.getX() + this.getHeight(), this.getY() + this.getWidth());
    }
    
    @Override
    public void add(Rectangle rec) {
        super.add(rec);
        super.add(this.getX() + this.getHeight(), this.getY() + this.getWidth());
    }

    @Override
    public void grow(int one, int two) {
        // 取两个增量的最大值,保证至少满足指定增长要求,同时宽高增量相等维持正方形
        int maxDelta = Math.max(one, two);
        super.grow(maxDelta, maxDelta);
    }
}

内容的提问来源于stack exchange,提问作者Banan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:06:07