Java代码中Circle类的void setRadius方法作用是什么?
为什么Circle类的setRadius方法存在,删除后代码仍能运行?
你现在的代码里radius是默认访问权限(同一个包内可直接读写),所以直接写circle2.radius = 100;确实能修改半径,删了setRadius代码也能正常跑,但这个方法的核心意义在于面向对象的封装思想,具体来说有这几个关键作用:
数据合法性校验:现在的
setRadius只是简单赋值,但如果后续需要限制半径不能为负数(圆的半径不可能是负的),直接修改radius的话没法拦截非法值,而在setRadius里可以轻松加判断逻辑:void setRadius(double newRadius) { if (newRadius >= 0) { // 新增合法性校验 radius = newRadius; } else { throw new IllegalArgumentException("半径不能为负数"); } }这样就能保证
radius始终是合法值,直接修改属性做不到这一点。实现封装隐藏:Java规范里通常会把类的属性设为
private(私有),禁止外部直接访问,只通过getter/setter方法操作。如果把radius改成private double radius;,外部就不能直接写circle2.radius = 100;了,必须用setRadius来修改。这样类的内部实现细节对外完全隐藏——比如以后你想把半径的存储方式改成别的,只要setRadius的方法签名不变,外部调用的代码根本不用改。代码一致性与可读性:和类里的
getArea、getPerimeter对应,遵循JavaBean的设计规范,用统一的方法来操作属性,其他开发者一看就明白怎么修改半径,代码风格更统一、易读。
你代码里的注释// or circle2.setRadius(100)其实已经提示了:直接改属性是一种临时写法,但用setRadius是更规范、更具扩展性的做法。
内容的提问来源于stack exchange,提问作者Michael Moore
相关产品推荐
相关产品推荐

