子类重写父类getArea方法后,如何调用父类原方法?已解决
关于子类重写方法后调用父类原方法的问题解答
嘿,先给你吃个定心丸——你代码里的super.getArea()其实是完全正确的,确实会调用父类Circle里的getArea方法来计算体积,你后来发现功能正常也验证了这一点~
核心问题解答:重写后能不能调用未被重写的父类方法?
当然可以!在Java中,当子类重写了父类的方法后,只要通过super.方法名()的语法调用,就会明确指向父类中未被重写的原始方法实现,完全不会被子类的重写版本干扰。
你的代码逻辑分析
咱们拆解下你的代码:
Circle类的getArea():计算的是圆的底面积(公式:π * radius²)Cylinder类的getVolume():通过super.getArea()拿到父类的底面积,再乘以height,这正是圆柱体积的正确计算逻辑Cylinder重写的getArea():实现的是圆柱的侧面积(公式:2 * π * radius * height),和父类的方法职责不同,两者完全独立
你之前误以为“无论是否使用super.都调用重写后的方法”,大概率是刚起床没睡醒的小乌龙啦,实际你的代码逻辑没有问题,super.getArea()确实精准调用了父类的方法。
小优化建议(非必需)
你的代码里的三元表达式可以简化得更易读,比如:
// 替换原来的radius赋值逻辑 this.radius = Math.max(radius, 0); // height同理 this.height = Math.max(height, 0);
内容的提问来源于stack exchange,提问作者Max Luchterhand
相关产品推荐
相关产品推荐

